Добрый день. Запрос на выборку сразу нескольких строк, 1) вот такой работает: Код (Text): SELECT * FROM table WHERE id IN(1,2,3); 2) а вот так уже не работает: Код (Text): SELECT * FROM table WHERE brand IN(audi,bmw,bugatti); В этом и вопрос, как сделать выборку нескольких строк, где идёт сравнение не с числом, а со словом?
для начала покажи мне где у тебя тут строки. вооот. нет у тебя строк. строки в кавычки заключены. должны быть.
Передаю массив названий, потом делаю строку, слова разделены запятой. Код (Text): $brand = $_POST['brand']; $brand = implode(",", $brand); $brand = mysqli_real_escape_string($db, $brand); $sql = "SELECT {$tbl_model}.`id` FROM `{$tbl_model}` WHERE {$tbl_model}.`brand` IN({$brand})";
нет, это у тебя пхп знает что там строки. а в мускул ты передаешь запрос в текстовом виде. и парсер уже ничего не знает про строки так как весь запрос пришел к нему одной большой строкой. попробуй имплодить не только по запятой но и по апострафам для приличия. и в запросе тоже не забудь строку обозначить.
desertFox , смотри по документации как строки использовать https://dev.mysql.com/doc/refman/5.7/en/string-literals.html
в общем сделал так: Код (Text): $brand = $_POST['brand']; $brand = implode("','", $brand); //$brand = mysqli_real_escape_string($db, $brand); $sql = "SELECT {$tbl_model}.`id` FROM `{$tbl_model}` WHERE {$tbl_model}.`brand` IN('{$brand}')"; Работает, но мне ещё пришлось закомментить mysqli_real_escape_string($db, $brand), иначе вместо такой строки * IN('audi','bmw','bugatti') * получается - * IN('audi\',\'bmw\',\'bugatti') *, т.е. экранирует. А как же теперь без mysqli_real_escape_string($db, $brand) от SQL инъекций подстраховаться?
исправил, Код (Text): $brand = $_POST['brand']; foreach ($brand as $key => $value) { $brand[$key] = mysqli_real_escape_string($db, $brand[$key]); } unset($key, $value); $brand = implode("','", $brand); $sql = "SELECT {$tbl_model}.`id` FROM `{$tbl_model}` WHERE {$tbl_model}.`brand` IN('{$brand}')"; вроде всё нормально, работает, всех благодарю за помощь