2016-06-08 3 views
0

Я читаю этот ответ: PHP - Using PDO with IN clause arrayОбъяснение PDO В статье, используя подготовленные заявления

Он использует код:

$in_array = array(1, 2, 3); 
$in = str_repeat('?,', count($in_array) - 1) . '?'; 
$sql = "SELECT * FROM my_table WHERE my_value IN ($in)"; 
$stm = $db->prepare($sql); 
$stm->execute($in_array); 
$data = $stm->fetchAll(); 

Может кто-нибудь объяснить, почему они использовали

$in = str_repeat('?,', count($in_array) - 1) . '?';

вместо вып .:

$in = str_repeat('?,', count($in_array));

Я озадачен и не может понять логику задней - 1) . '?'

+2

потому что он будет заканчиваться на 'IN (?,?,?,)' (См. Дополнительную запятую) – Federkun

+0

Как @Federico говорит ... речь идет о этой конечной запятой. Для трех заполнителей нужны только две запятые. Это может быть '$ in = '?' , str_repeat (',?', count ($ in_array) - 1); ' – spencer7593

ответ

0

Это потому, что функция str_repeat() повторяет строку заданное число раз, и рассчитывать() функция возвращает длину массива, который означает, что он приведет к «?,?,?,?,?», если длина массива равна 5 (пусть предположим), которая не выглядит форматированной, поэтому count ($ in_array) -1 с '?' прилагается.

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