2011-04-01 5 views
1

변수 username에 저장된 이름이있어서Ruby MySQL 쿼리에서 변수 사용하기

을 시도하면 사용자 행 정보를 가져오고 싶습니다.
result = dbh.query("SELECT * FROM maintab WHERE user = '#{username}'") 

결과가 없습니다. 그러나 손으로 사용자 이름을 입력하면 결과가 반환됩니다. 변수를 사용할 수 있도록 내 쿼리의 형식을 지정하는 방법은 무엇입니까?

+3

blank이 경고에 대한 http://en.wikipedia.org/wiki/SQL_injection에 대한 –

+0

감사를 조심처럼 보이는, 내가 인젝션 공격 증거에 실제로 모든 것을 일단 내 모든 쿼리해야합니다 일. – Arbiter

+0

'username' 변수가 nil 또는 emty가 아닌 것은 확실합니까? – fl00r

답변

2

이 방법을 디버깅하려고합니다. 당신의 usernamenil 또는

+0

Crazy : 빌어 먹을 사용자 이름을 화면에 표시하고 변수를 출력해서 거기에 있는지 확인했다. 그러나 내가 위와 같이 사용자 이름을 설정하면 효과가있었습니다. 변수에 여분의 것이 있었고 .strip은 바로 변수를 지 웁니다. 감사. – Arbiter

+0

@Arbiter : 데이터 정제 (즉, SQL 삽입)에 대해 걱정하기 전에 작업을 수행하는 것에 대해 뭔가를 말하고있었습니다 ... –

+0

나는 쿼리에서 변수를 사용하는 데 문제가 있다는 것을 멍청하게 추측했습니다. 그게 날 가르쳐 줄거야. – Arbiter

0

IRB를 열고 가지고있는 것을 인쇄하십시오.

# {}이 (가) 작은 따옴표와 함께 어떻게 동작하고 큰 따옴표가 이스케이프됩니까?

귀하의 질문에 답변 해주십시오. 이 작업을해야

username = "Peter" # any of your real name 
result = dbh.query("SELECT * FROM maintab WHERE user = '#{username}'") 

:

+0

IRB를 사용해 볼 수 있을지 확실하지 않습니다. 원격 서버에서 스크립트를 실행 중입니다. 나는 그것이 발견 된 것을 알기 위해 발견 한 행의 수를 내야한다. 나는 정확하게 이스케이프 된 큰 따옴표를 시도하고 동일한 결과를 만났다고 생각합니다. 그게 가능하다면 내가 잘못 했어. – Arbiter