Я действительно застрял с этим.
Я пытаюсь передать список кодов в оператор MySql, но не в том формате, в котором он работает.
Мой список исходит из текстовой области формы под названием «уникальный код».
Примеры кодов (все на новой строке) из текстовой области:
фг3456 тг7844 де3902 .. и т.д.
Я пытаюсь взорвать и взорвать список с помощью:
$ar = $_POST['uniquecode']
$in = "'".implode("','", explode("\n", $ar))."'";
Затем результат $in передается в статус Mysql:
$sql = "SELECT code, size, price from stock WHERE code IN ($in)";
Когда я повторяю $sql, я получаю следующее:
SELECT housecode, name, cost, size, price FROM stock where code IN ('fg3456 ','tg7844 ', ','de3902')
Как видите, только ПОСЛЕДНИЙ элемент, 'de3902', отформатирован правильно. Обратите внимание, что первый элемент в списке имеет пробел, затем одинарную кавычку, а затем запятую: 'fg3456',
Из-за этой проблемы, когда я пытаюсь просмотреть набор результатов из запроса, возвращается только последний элемент:
$result = $mysqli->query($sql);
if ($result = mysqli_query($mysqli, $sql)) {
while($row = $result->fetch_array()) {
$code = $row['code'];
$name = $row['name'];
$size = $row['size'];
$price = $row['price'];
}
echo $code; //returns last item in the list: de3902
Итак, мой вопрос заключается в том, как взорвать/взорвать список в правильный формат для предложения IN запроса Mysql, чтобы он правильно читался и возвращал все коды???
SELECT code, name, size, price from stock WHERE code IN ('fg3456','tg7844','de3902')
С уважением
var_dump($_POST['uniquecode'])
, скопированный из исходного кода страницы браузера, а не отображаемый на экране. У вас есть что-то ложное (я думаю, не лишний разрыв строки), что нарушает вашimplode()
, возможно, это можно исправить с помощьюarary_filter()
. Но необходимо предпринять шаги, чтобы защитить это от SQL-инъекций. - person Michael Berkowski   schedule 18.12.2014preg_split()
вместо этого, чтобы разбить на несколько пробелов или символов новой строки. - person jeroen   schedule 18.12.2014