Заявление работает на phpmyadmin, но не через php

Возможный дубликат:
PDO поддержка нескольких запросов (PDO_MYSQL, PDO_MYSQLND)

У меня есть заявление здесь.. когда я запустил его из phpmyadmin.. мой запрос работает.. но он не работает, когда я выполняю его из php..

вот мой запрос (утверждение)

SET @sql = NULL;
 SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(a.Name = ''', a.Name, ''', ca.value, NULL)) AS ', a.Name )) INTO @sql FROM cust_attribute ca INNER JOIN attribute a ON ca.idAttribute = a.idAttribute INNER JOIN customer c ON c.idCustomer = ca.idCustomer WHERE a.publish = 'Y';
 SET @sql = CONCAT('SELECT c.idCustomer, c.namaCustomer, ' ' c.email, c.noTelp, ', @sql, ' FROM cust_attribute ca', ' INNER JOIN attribute a ON ca.idAttribute = a.idAttribute', ' INNER JOIN customer c ON c.idCustomer = ca.idCustomer', ' GROUP BY c.idCustomer');
 SELECT @sql;
 prepare stmt FROM @sql;
 execute stmt;

а вот мой код на php...

<?php 
$uname = 'root'; //nama username database 
$pwd = ''; //Password database 
$dbname = 'eav_latihan'; //nama Database 

/* Initialisasi database */ 
$db = new PDO('mysql:host=localhost;dbname='.$dbname, $uname, $pwd); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 


$query = "SET @sql = NULL; ". 
" SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(a.Name = ''', ". 
" a.Name, ''', ca.value, NULL)) AS ', a.Name )) INTO @sql ". 
" FROM cust_attribute ca ". 
" INNER JOIN attribute a ON ca.idAttribute = a.idAttribute ". 
" INNER JOIN customer c ON c.idCustomer = ca.idCustomer ". 
" WHERE a.publish = 'Y'; ". 
" SET @sql = CONCAT('SELECT c.idCustomer, c.namaCustomer, ' ". 
" ' c.email, c.noTelp, ', @sql, ' FROM cust_attribute ca', ". 
" ' INNER JOIN attribute a ON ca.idAttribute = a.idAttribute', ". 
" ' INNER JOIN customer c ON c.idCustomer = ca.idCustomer', ". 
" ' GROUP BY c.idCustomer'); ". 
" SELECT @sql; ". 
" prepare stmt FROM @sql; ". 
" execute stmt;"; 

$result_array = array();
$queryku = $db->query($query);
$result_array = $queryku->fetchAll(PDO::FETCH_OBJ);
var_dump($result_array);
?>

Кто-нибудь может мне помочь или дать мне предложение здесь ??


person Wawan Brutalx    schedule 05.11.2012    source источник
comment
используйте блок try-catch, перехватите все возникающие исключения и просмотрите сообщения, которые они создают. Также: почему вы используете переменные сеанса и подготовленные операторы на стороне базы данных? PS: посмотрите, как включить эмулированные подготовленные операторы в расширении PDO, потому что это может быть причиной вашей проблемы, а также тот факт, что половину времени вы используете слишком много одинарных кавычек: a.Name = '''   -  person Elias Van Ootegem    schedule 05.11.2012
comment
4 года в будущем и интересно, как вам это понравилось?   -  person Andrei Maieras    schedule 13.02.2016


Ответы (2)


Эта проблема возникла раньше в отношении PDO. Не уверен, что это ошибка или функция безопасности (может быть связано с этим: Mysql не может выполнять более 1 запроса за раз).

Взгляните на это решение: http://www.php.net/manual/en/book.pdo.php#96264

person Tom    schedule 05.11.2012
comment
Отлично.. работает... :) - person Wawan Brutalx; 05.11.2012

Я думаю, что PDO не может выполнять несколько запросов. Попробуйте использовать Stored Procedure на этом.

DELIMITER $$
CREATE PROCEDURE procName
BEGIN
SET @sql = NULL;
 SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(a.Name = ''', a.Name, ''', ca.value, NULL)) AS ', a.Name )) INTO @sql FROM cust_attribute ca INNER JOIN attribute a ON ca.idAttribute = a.idAttribute INNER JOIN customer c ON c.idCustomer = ca.idCustomer WHERE a.publish = 'Y';
 SET @sql = CONCAT('SELECT c.idCustomer, c.namaCustomer, ' ' c.email, c.noTelp, ', @sql, ' FROM cust_attribute ca', ' INNER JOIN attribute a ON ca.idAttribute = a.idAttribute', ' INNER JOIN customer c ON c.idCustomer = ca.idCustomer', ' GROUP BY c.idCustomer');
 SELECT @sql;
 prepare stmt FROM @sql;
 execute stmt;
END $$
DELIMITER ;

и вызовите procName в вашем файле PHP.

person John Woo    schedule 05.11.2012
comment
как это сделать?? я ничего не знаю о хранимой процедуре .. где это создать? - person Wawan Brutalx; 05.11.2012