Я сохранил некоторые данные в поле внутри 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). Что я сделал не так?
Вам нужно как можно больше ?
заполнители как ваши значения «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();
(также, если вы хотите, чтобы 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();
Кроме того, прочитав еще раз ваш вопрос, я могу Угадай что твой $related
переменная просто string
со значениями через запятую 1,40,6,99
, Если это так, вы должны сделать это array
, делать: $related = explode($related,",");
чтобы сделать это массив чисел. Тогда в вашем execute
метод проход $related
как есть.
Других решений пока нет …