2015-06-07 7 views
0

Мой PHP выглядит следующим образом:передать несколько параметров в PDO

$diagSel = $_POST['diagSel']; 
$search_crit = $_POST['criteria']; //this is an entry like "85054,85206" (no quotes) 
$sql1 = "SELECT * FROM `myTable` where`Diagnosis` = :diagnosis and `zip_code` in (:placeHolder) group by `Provider Number`"; 
$stmt = $dbh->prepare($sql1); 
$stmt->bindParam(':diagnosis', $diagSel, PDO::PARAM_STR); 
$stmt->bindParam(':placeHolder', $search_crit, PDO::PARAM_STR); 
$stmt->execute(); 
$result1 = $stmt->fetchAll(PDO::FETCH_ASSOC); 
header('Content-type: application/json'); 
echo json_encode($result1); 

Вот проблема ... если пользователь вводит несколько кодов ZIP (переданные в criteria), которые должны быть разделены запятой, это ECHO сек ничего. Если они вводят один ZIP-код, он возвращает именно то, что я ожидаю.

Есть ли способ передать значение, разделенное запятыми, PDO, например 85054,85206, с использованием подготовленных операторов?

Спасибо.

+0

Используйте обертку ORM или PDO, которая поддерживает привязку к массиву (Aura.SQL делает, другие разрешают заполнители списка '' 'в стиле Perl). Альтернативно: используйте 'FIND_IN_SET()' для списка CSV. – mario

+0

Не использовали методы '??' намного раньше ... можете ли вы привести пример? – jonmrich

+0

Это не вещь PDO. Для этого требуется библиотека абстракции сверху, которая допускает такие заполнители. Иначе вам придется прибегать к [hodgepodge 'join()'/etc. обходные] (http://stackoverflow.com/questions/14767530/php-using-pdo-with-in-clause-array). – mario

ответ

1

Это не так, я бы рекомендовал что-то вроде этого:

$diagSel  = $_POST['diagSel']; 
$search_crit = $_POST['criteria']; 
$list  = explode(',', $search_crit); 
array_map(array($dbh, 'quote'), $list); 

$sql1 = sprintf(' 
    SELECT * 
    FROM `myTable` 
    WHERE `Diagnosis` = :diagnosis 
    AND `zip_code` IN (%s) 
    GROUP BY `Provider Number`', implode(',', $list)); 

$stmt = $dbh->prepare($sql1); 
$stmt->bindParam(':diagnosis', $diagSel, PDO::PARAM_STR); 
$stmt->execute(); 

$result1 = $stmt->fetchAll(PDO::FETCH_ASSOC); 
header('Content-type: application/json'); 
echo json_encode($result1); 
+0

Спасибо. Что-то не хватает в этой строке? 'array_map ([$ dbh, 'quote'], $ list);' Получение ошибки: 'Call to undefined function sprtinf()' – jonmrich

+0

Фактически ... пропустил одну вещь ... теперь получил эту ошибку: 'синтаксическая ошибка, неожиданный '[', expecting ')' 'Это относится к строке 'array_map'. – jonmrich

+0

Жаль, что первая была опечаткой, вторая, я считаю, у вас есть старая версия PHP (до 5.4). Попробуй! – Martin

1

Вы не можете использовать bindpram дважды, если вы хотите добавить несколько значений в запросе SQL есть массив в ехес команду, чтобы добавить во всех переменных

+0

Хорошо ... любые предложения по альтернативному способу сделать это? – jonmrich

+1

$ shtm-> выполнить (массив ( \t ': диагностика' => $ diagSel, \t ': PlaceHolder' => $ search_crit \t)); <- Мне нравится –

+0

Спасибо ... это вернуло меня туда, где я начал. Если я передаю один почтовый индекс, он отлично работает. Если я передаю несколько, это не сработает ('ECHO's nothing) – jonmrich

Смежные вопросы