2011-12-23 2 views
1

mysql_real_escape_string은 IN 절의 값에 슬래시를 추가하므로 값이 반환되지 않습니다. 어떻게 IN 절에서 mysql_real_escape_string()을 사용하여 이스케이프 된 배열 값을 보낼 수 있습니까? 이 같은 변화는 mysql_real_escape_string 후IN 절의 mysql_real_escape_string 사용

$names_array = array('dave','smith'); 
$names = mysql_real_escape_string("'". implode("', '", $names_array) ."'"); 
$sql = "SELECT * FROM user WHERE user_name IN ($names)"; 
$results = mysql_query($sql); 

검색어 :

SELECT * FROM user WHERE user_name IN (\'dave\', \'smith\') 

내가 IN 절 여기에 이러한 슬래시를 원하지 않는

여기 내 코드입니다. 또한 IN 절에서 직접 대체 된 값을 원하지 않습니다. 미리 감사드립니다.

답변

4

가능성이 있습니다.

$names = "'". implode("', '", array_map('mysql_real_escape_string', $names_array)). "'"; 
+0

굉장합니다. 감사 –

0

mysql_real_escape_string; mysql_* 기능을 전혀 사용하지 마십시오. ADODB 또는 somesuch를 사용하십시오. 이 방법으로 쿼리를 연결하지 마십시오. 자리 표시 자 (?)와 준비된 문을 사용하십시오. 코드는 다음과 유사해야합니다.

include('/path/to/adodb.inc.php'); 
$DB = NewADOConnection('mysql'); 
$DB->Connect($server, $user, $pwd, $db); 

# M'soft style data retrieval with binds 
$rs = $DB->Execute("select * from user where user_names in ?",array(array('dave','smith'))); 
while (!$rs->EOF) { 
    print_r($rs->fields); 
    $rs->MoveNext(); 
} 
+0

생각해 보니 * mysqli *는 adodb보다 낫다고 생각하십니까? –

+0

감사합니다. Tom Regner. –

+1

@Shiplu 적절한 절차를 사용하는 한, 나는 DB 액세스 라이브러리가 사용되는 것과 같이 불가지론이다. :); ADODB, PDO 등을 사용하는 인센티브는 프로젝트가 PHP 부분이 아닌 개발 중에 데이터베이스를 전환하는 경우 SQL을 약간 조정해야한다는 것입니다. –