Как использовать подготовленные операторы PDO с предложением IN?

Я сохранил некоторые данные в поле внутри MySQL в этом формате: 1,5,9,4
Я назвал это поле связанные с. Теперь я хочу использовать это поле внутри В пункте с PDO. Я сохранил содержимое этого поля в $related variabe. Это мои следующие коды:

$sql = "SELECT id,title,pic1 FROM tbl_products WHERE id IN (?) LIMIT 4";
$q = $db->prepare($sql);
$q->execute(array($related));
echo $q->rowCount();

Но после выполнения этого кода я могу получить только одну запись, тогда как мне нужно выбрать 4 записи (1,5,9,4). Что я сделал не так?

0

Решение

Вам нужно как можно больше ? заполнители как ваши значения «IN».

Так:

$related = array(1,2,3); // your "IN" values

$sql = "SELECT id,title,pic1 FROM tbl_products WHERE id IN (";

$questionmarks = "";
for($i=0;$i<count($related);$i++)
{
$questionmarks .= "?,";
}

$sql .= trim($questionmarks,",");
$sql .= ") LIMIT 3;";

// echo $sql; // outputs: SELECT id,title,pic1 FROM tbl_products WHERE id IN (?,?,?) LIMIT 3;

$q = $db->prepare($sql);
$q->execute($related); // edited this line no need to array($related), since $related is already an array
echo $q->rowCount();

https://3v4l.org/No4h1

(также, если вы хотите, чтобы 4 записи вернулись, избавьтесь от LIMIT 3)

Более элегантно вы можете использовать str_repeat добавить ваши заполнители следующим образом:

$related = array(1,2,3); // your "IN" values

$sql = "SELECT id,title,pic1 FROM tbl_products WHERE id IN (";
$sql .= trim(str_repeat("?,",count($related)),",");
$sql .= ") LIMIT 3;";

// echo $sql; // outputs: SELECT id,title,pic1 FROM tbl_products WHERE id IN (?,?,?) LIMIT 3;

$q = $db->prepare($sql);
$q->execute($related); // edited this line no need to array($related), since $related is already an array
echo $q->rowCount();

https://3v4l.org/qot2k

Кроме того, прочитав еще раз ваш вопрос, я могу Угадай что твой $related переменная просто string со значениями через запятую 1,40,6,99, Если это так, вы должны сделать это array, делать: $related = explode($related,","); чтобы сделать это массив чисел. Тогда в вашем execute метод проход $related как есть.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]