Может ли одно и то же значение быть связано более одного раза в запросе?

Кажется, в использовании параметров связывания есть что-то вроде (анти?) Шаблона:

$dbh->do(
       'select foo from bar where baz > ? and baz < ? + 1',
       undef,
       $var1, $var1
)

то есть, что действительно нужно, это использовать значение $var1 дважды в запросе. Есть ли способ избежать указания $var1 дважды в списке параметров связывания?

3 ответа

Во-первых, использование на самом деле

$dbh->do(
       'select foo from bar where baz > ? and baz < ? + 1',
       undef,
       $var1, $var1
);

Если ваш DBD не поддерживает позиционные или именованные заполнители,

$dbh->do(
       'select foo from bar where baz > $1 and baz < $1 + 1',
       undef,
       $var1
);

вам нужно будет указать его дважды, хотя вы можете использовать

$dbh->do(
       'select foo from bar where baz > ? and baz < ? + 1',
       undef,
       ($var1)x2
);

Одним из способов может быть использование пронумерованных заполнителей, если ваш драйвер их поддерживает, например:

$dbh->do(
       'select foo from bar where baz > ?1 and baz < ?1 + 1',
       undef,
       $var1
)

То, что вы хотите сделать, это использовать именованный параметр. Некоторые библиотеки, такие как PDO, поддерживают это.

Другие вопросы по тегам