Использование mysql_real_escape_string в предложении IN - PullRequest
1 голос
/ 23 декабря 2011

mysql_real_escape_string добавляет косые черты к значениям в предложении IN и, следовательно, никакие значения не возвращаются. Как я могу отправить значения массива, которые экранированы, используя mysql_real_escape_string () в предложении IN?

Вот мой код:

$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 ]

4 голосов
/ 23 декабря 2011

Это может сделать это.

$names = "'". implode("', '", array_map('mysql_real_escape_string', $names_array)). "'";
0 голосов
/ 23 декабря 2011

Не использовать 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();
}
...