Использование подготовленных операторов в PHP с функцией IN в SQL - PullRequest
1 голос
/ 22 февраля 2012

Я работаю над системой тегов, используя 3 таблицы (нормализовано). Я хотел создать подготовленное утверждение для некоторых случаев поиска, например, «красные яблоки», что оно вызывает все элементы, которые были отмечены как «красные» и «яблоки».

В настоящее время мой запрос выглядит примерно так:

$stmt = $db->prepare("SELECT co.content_id, co.description FROM em_content AS co LEFT JOIN em_contenttags AS ct ON co.content_id = ct.content_id LEFT JOIN em_tags AS ta ON ct.tag_id = ta.tag_id WHERE ta.tag IN (?)");
$stmt->bind_param("s", $query);
$stmt->execute();
$stmt->store_result();

Я пытался сделать $query массивом и использовать заполнители для "?" в запросе и "s" в переменной bind_param, но я не могу передать $query в виде массива, в противном случае выдается ошибка.

Есть ли способ заставить это работать с готовыми заявлениями?

Просто к вашему сведению, я не использую PDO, я использую mysqli

Ответы [ 2 ]

1 голос
/ 22 февраля 2012

Вам придется динамически создавать заполнители, поэтому у вас будет по одному ? для каждого элемента массива:

$array = array('foo', 'bar', 'baz');
$placeholders = join(',', array_fill(0, count($array), '?'));
$stmt = $db->prepare('SELECT ... WHERE IN (' . $placeholders . ')');
$stmt->execute($array);

Не уверен на 100%, как использовать механизм MySQLi bind, вышеописанное работает для PDO.

0 голосов
/ 22 февраля 2012

Насколько я знаю, вы не можете использовать заполнители внутри "IN ()".Вам необходимо объединить эту часть запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...