2010-12-12 9 views
0

내가 PDO + MySQL을 사용 기본 준비된 명령문을 할 노력하고있어 .. 난 내 인생에 대한 할당 된 값을 얻을 수없는 것 준비 ? 미리 감사드립니다 !!PHP PDO 기본 문

표 결과 :

mysql> select * from users; 
+--------+----------+-----------+---------------+-------------+---------+---------------------+----------+------------+---------+------+ 
| userId | userName | userPass | accountStatus | accountType | balance | tCreated   | tUpdated | tLastLogin | promoId | ref | 
+--------+----------+-----------+---------------+-------------+---------+---------------------+----------+------------+---------+------+ 
|  1 | :a  | :userPass | unconfirmed | user  |  0 | 2010-12-12 13:42:10 |  NULL |  NULL | NULL | NULL | 
+--------+----------+-----------+---------------+-------------+---------+---------------------+----------+------------+---------+------+ 
+0

왜 필요합니까? –

+0

@Col OP가 질문을 단순화했다고 생각합니다. 가능성은 값은 알려진 상수가 아닙니다. – Phil

답변

2

SQL 문에서 변수를 따옴표 ... ':a' ..으로 둘러 쌀 것입니다. 파서가 변수가 아닌 문자열을 의미한다고 생각할 것이므로 파서를 제거하십시오. 데이터베이스에 bind() 호출 문자열이 있다는 것을 알립니다.

+0

그래, 나는 당신이 대답 한 것처럼 그것을 잡았 .. 감사합니다 !!/내가 붉은 황소를 열면 : P –

0

var_dump는 당신에게 당신이 기대하는 것 같다 123로 치환 된 :test와 쿼리를 보여주지해야한다. $sth->execute();으로 전화하면 완료됩니다.

이유는 준비된 문이 작동하는 방식과 관련이 있습니다. 쿼리가 실행될 때 쿼리는 데이터베이스에 문자열로 전송된다는 것을 알 수 있습니다. 여기에서 내부 형식으로 파싱되어 인터프리터에서 실행됩니다. 준비된 문을 사용하면 변수의 값 (예 : : :test)이 쿼리와 별도로 전송되고 구문 분석됩니다. 즉, 값이 결코 쿼리의 일부가 아니므로 파서에 도달하지 않기 때문에 파서를 사기성 공격에 의존 할 수는 없습니다.

+0

답장을 보내 주셔서 감사합니다. –

+0

설명 주셔서 감사하지만 문제는 데이터를 교체하지 않고 매개 변수를 보여주기 때문에 데이터를 데이터베이스로 보내지 않는 것입니다. 나는 두 대의 서버에서 그것을 테스트했고,이 시점에서 무슨 범인이 될 수 있는지 모르겠다. 어떤 아이디어가 크게 감사하겠습니다 :) –