Как передать случайное число параметров в запрос? В приведенных ниже блоках кода показано, что было предпринято. На всех ошибках отображается bool (false). Для тестирования для представления идентификаторов используются три целых числа.Переменная переходов Количество параметров для Postgresql
Запрос из пункта 1 был выполнен вручную в pgAdminIII и был успешным. Запрос из пунктов 2 и 4 был эхо и сравнен. Они выглядят близко, как и предполагалось, но параметры не являются обязательными.
SELECT column FROM table WHERE id = ANY('{1,2,3}'::int[]);
SELECT column FROM table WHERE id = ANY('{?,?,?}'::int[])
1) Это работает. Желание является то, что какой-либо пункт будет 1-N номера:
$sql = "SELECT column FROM table WHERE id = ANY('{1,2,3}'::int[])";
$sth = $dbh->prepare($sql);
$sth->execute();
$result = $sth->fetch(PDO::FETCH_NUM);
echo var_dump($result);
$dbh = null;
2) это терпит неудачу:
$values = array(1,2,3);
$placeHolders = implode(',', array_fill(0, count($values), '?'));
$sql = sprintf("SELECT column FROM table WHERE id = ANY('{%s}'::int[])", $placeHolders);
$sth = $dbh->prepare($sql);
$sth->execute($values);
$result = $sth->fetch();
echo var_dump($result);
$dbh = null;
3) это терпит неудачу:
$values = array(':qwer' => 1, ':asdf' => 2, ':zxcv' => 3);
$sql = "SELECT colum FROM table WHERE id = ANY(\'{ :qwer , :asdf , :zxcv }\'::int[])"; //Below error caused if single quote not escaped.
$sth = $dbh->prepare($sql);
$sth->execute($values); // Invalid parameter number: :qwer if single quotes not escaped.
$result = $sth->fetch();
echo var_dump($result);
$dbh = null;
4) Это терпит неудачу (явно привязывая параметры):
$values = array(1,2,3);
$placeHolders = implode(',', array_fill(0, count($values), '?'));
$sql = sprintf("SELECT query FROM nc_reports WHERE id = ANY('{%s}'::int[])", $placeHolders);
$sth = $dbh->prepare($sql);
$i = 1;
foreach($values as $val)
{
//$sth->bindParam($i, $val, PDO::PARAM_INT);
$sth->bindValue($i, $val, PDO::PARAM_INT);
$i++;
}
$sth->execute();
$result = $sth->fetch();
echo var_dump($result);
$dbh = null;
Это может быть полезно http://stackoverflow.com/questions/920353/php-pdo-can-i-bind-an-array-to-an -in-condition – FoolishSeth
Мне любопытно, вы когда-нибудь пытались повторить результат своей программы? Программа, которая создает запрос, я имею в виду. Разве это не отличается от рукописного? если да - в чем разница? –
@FoolishSeth: Спасибо, что подняли головы. Я изменил свой запрос от ANY до IN, и он работает. – Dave