Я постоянно замечал, что когда я пытаюсь использовать массив в запросе MySQL, который находится внутри Ajax-вызова (по крайней мере, я пробовал его только из Ajax-вызова) в строке, разделенной специальным символом-разделителем, мой запрос работает только если символ является запятой. Например, это работает:
$myString = "String1,String2,String3,String4";
$ExplodedString = explode(",", $myString);
$sql = mysqli_query($cxn, "SELECT user FROM login WHERE column IN ('".implode("','", $ExplodedString)."') ORDER BY user");
Но я никогда не смогу заставить другого специального персонажа, даже подчеркивания, вернуть НИЧЕГО:
$myString = "String1_String2_String3_String4";
$ExplodedString = explode("_", $myString);
$sql = mysqli_query($cxn, "SELECT user FROM login WHERE column IN ('".implode("'_'", $ExplodedString)."') ORDER BY user");
//There are no error messages in my error log, even though error reporting is ON
Есть идеи, почему?
Вы снова взломали (приклеили) с подчеркиванием, используйте ,
:
$sql = "SELECT user FROM login WHERE column IN ('".implode("','", $ExplodedString)."') ORDER BY user";
// ^ you glued it with comma not underscore
Примечание: на самом деле это довольно легко отладить.
Сначала поместите запрос в отдельную переменную, а затем просто используйте echo $sql;
, Проверьте запятые, зарезервированные слова и т. Д., Чтобы вы знали, чего ожидать.
И, конечно же, не забудьте включить отчеты об ошибках:
error_reporting(E_ALL);
ini_set('display_errors', '1');
Это правильное использование на IN()
Других решений пока нет …