在IN子句中使用mysql_real_escape_string

时间:2011-12-23 09:37:11

标签: php mysql mysql-real-escape-string

mysql_real_escape_string将斜杠添加到IN子句中的值,因此不返回任何值。如何在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);

mysql_real_escape_string改变之后的查询:

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

我不想在IN子句中使用这些斜杠。另外,我不希望在IN子句中直接替换值。 在此先感谢。

2 个答案:

答案 0 :(得分:4)

这可能会这样做。

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

答案 1 :(得分:0)

不要使用mysql_real_escape_string;不要直接使用mysql_*函数;使用ADODB或某些人;不要以这种方式连接您的查询,使用占位符(?)和准备好的语句。您的代码应该与此类似:

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();
}