Вопрос PHP: PDO Prepare () и Execute () с MYSQL IN () не работают для массивов - PullRequest
1 голос
/ 22 июня 2011

Я использую объект PDO в PHP для выполнения запросов MYSQL, и у меня, похоже, возникла проблема с использованием предложения IN () с PDO :: Prepare ().Пользовательский ввод: теги, разделенные запятойпр) баскетбол, футболЯ кодирую следующее:

$query = 
"SELECT s.item_id, s.item_type, s.title
FROM search_all s 
WHERE EXISTS ( 
    SELECT t.item_id 
    FROM tags t 
    WHERE t.item_id = s.item_id AND t.item_type = s.item_type 
    AND t.tag IN (:tags) 
)";

$mysql_vars[':tags'] = implode("','",explode(',',$tags));
$stmt = $connection->prepare($query);
$stmt->execute($vars);
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);

Из того, что я понимаю, execute () будет заключать каждую переменную в двойные кавычки ("), поэтому я вручную добавляю двойные кавычки между каждым вводом, чтобы имитировать sql как:

SELECT s.item_id, s.item_type, s.title
FROM search_all s 
WHERE EXISTS ( 
    SELECT t.item_id 
    FROM tags t 
    WHERE t.item_id = s.item_id AND t.item_type = s.item_type 
    AND t.tag IN ("basketball","football") 
)

Это не работает для меня, однако. Есть ли способ по-прежнему использовать PDO prepare () и execute () при использовании предложения sql IN ()?

1 Ответ

1 голос
/ 22 июня 2011

Вам нужно будет сделать что-то вроде AND t.tag IN (:tag1, :tag2)

. Сейчас он думает, что вы ищете текстуально "basketball","football"

. Для этого вы можете создать генератор запросов, используя строку PHPдобавляет и петли:)

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