2012-06-19 2 views
2

안녕하세요. 문자열 변수를 전달하지 않는 MySQL 쿼리에 문제가 있습니다.PHP는 문자열을 전달할 때 MySQL 쿼리 오류가 발생했습니다.

$pass에 숫자 만 들어 있으면 제대로 작동합니다. 문자가 포함되어 있으면 Cannot execute the query 오류가 발생합니다.

예 :

$pass=123456  //works fine 
$pass=z23456  //cannot execute the query 
$_SESSION['id']=$pass;   //start session 

if (isset($_SESSION['id'])) { 

// Query database for user information. 
$query = "SELECT RepName FROM RepTable WHERE RepNumber = 
".$_SESSION['id'].""; 
$result = mysql_query ($query) OR die ('Cannot execute the query.'); 
$rinfo = mysql_fetch_array ($result); 
$RepInfo = $rinfo[0]; 
+2

데이터베이스에 RepNumber 어떤 종류의 당신이 MySQL과 연동하여 준비된 문을 사용한다, 그것은 안전 (예를 들어 SQL 주입을)입니까? –

+1

디버깅 팁 :'OR die ("$ query"쿼리를 실행할 수 없습니다.);'- 개발에만 사용 - 프로덕션 환경에서는 절대 사용하지 마십시오. 예를 들어'$ pass' =''foo ''이면 SQL 문은 SELECT RepName FROM RepTable WHERE RepNumber = foo'를 읽는다는 것을 알 수 있습니다 -'foo'는 유효한 식별자 나 함수가 아닙니다. 번호는 따옴표로 묶어야합니다. RepNumber가 문자열 유형이라면 mgraph의 대답이 해결책입니다. RepNumber가 숫자 유형이면 $ pass를 먼저 확인해야합니다. – megaflop

+0

덧붙여 말하면, mysql 확장의 사용은 권장되지 않습니다. 당신은 정말로 mysqli 또는 pdo 확장자를 사용하는 것을 고려해야한다. [자세한 내용은 여기를 참조하십시오] (http://uk.php.net/manual/en/mysqlinfo.api.choosing.php) – megaflop

답변

5

시도 :

'".$_SESSION['id']."'" 

대신 :

".$_SESSION['id']."" 

당신은 또한 추가 할 수 있습니다

mysql_escape_string($_SESSION['id']) 
관련 문제