MySQL Perl заполнителей правила - PullRequest
0 голосов
/ 08 ноября 2011

MySQL, Perl

Следующий select отлично работает без заполнителей, но не с заполнителями. Он не генерирует никаких ошибок SQL, но возвращает все пробелы / нули - не то же количество, что и тот же оператор без заполнителей.

my $sql="SELECT ?, SUM(IF(H1='1',1,0)) AS banner1 FROM table_name WHERE (?!='' and ? IS NOT NULL) GROUP BY ?";

my $sth = $dbh->prepare($sql);

my $variable = "Q1";

$sth->execute($variable, $variable, $variable, $variable);   

Что я делаю не так?

Я пытаюсь использовать заполнители не по назначению? Это работает, когда я использую только заполнители в предложении WHERE. Он не работает, когда я использую заполнитель в предложении SELECT или GROUP BY. В этом ли проблема - заполнители можно использовать только в предложении WHERE?

Ответы [ 2 ]

3 голосов
/ 08 ноября 2011

Нельзя использовать заполнители в части SELECT оператора SQL.Это описано в документации :

В большинстве драйверов заполнители нельзя использовать для любого элемента оператора, который не позволил бы серверу базы данных проверить оператор и создать его.план выполнения запроса для него.Например:

"SELECT name, age FROM ?"         # wrong (will probably fail)
"SELECT name, ?   FROM people"    # wrong (but may not 'fail')
2 голосов
/ 08 ноября 2011

Нельзя использовать заполнители для замены имени столбца или таблицы. Даже в вашем предложении WHERE он не делает то, что вы думаете, он делает. Когда вы заменяете Q1 вместо заполнителя, вы получаете:

WHERE ('Q1'!='' and 'Q1' IS NOT NULL)

т.е. выражение, которое всегда верно.

...