2013-11-17 4 views
0

Если я вручную выполнил следующий запрос, заменив значения вместо:, его рабочий, но тот же запрос ничего не возвращает, если выполняется через php ...Функция PHP MySQL PDO execute, не дающая результата, когда тот же самый параметр используется дважды

$sql_check = $dbConnection->prepare("select sum(case when 
upper(main_category)=upper(:main_category) and 
upper(sub_category1)=upper(:sub_category1) then 1 
when upper(main_category)=upper(:main_category) then 1 else 0 end) cnt from dbs.sales;"); 
$sql_check->execute(array(':main_category' => $main_category,':sub_category1' => 
$sub_category1,':sub_category2' => $sub_category2)); 

foreach ($sql_check as $row) { 
$cnt=$row['cnt']; 
echo "cnt ".$cnt."<br>"; //No rows returned upon execution 
}//end of for loop 

Здесь : main_category используется дважды

выше запрос работает нормально, если я НЕ использовать : main_category дважды ...

Пожалуйста, помогите мне и дайте мне знать, как запустить запрос, если в запросе будет использоваться такое же параметризованное поле?

+0

Тогда не используйте ': main_category' дважды. Назовите это чем-то другим. [** RTFM **] (http://www.php.net/manual/en/pdostatement.execute.php) – Bojangles

ответ

2
$dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, TRUE); 

первым, чтобы сделать его работу

и

$dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

было бы полезно слишком

+0

Что сделаете это? – logan

+0

Пожалуйста, дайте мне знать функциональность этих настроек? – logan

+0

http://stackoverflow.com/questions/8263371/how-prepared-statements-can-protect-from-sql-injection-attacks/8265319#8265319 и http://stackoverflow.com/tags/pdo/info –

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