2010-08-14 2 views
5

젠드 프레임 워크와 MySQL을 사용하는 이상한 문제가 있습니다. 나는 쿼리 생성 : 나는 PMA, Navicat는 또는 쉘 클라이언트하지만 같은 일부 콘솔에서 실행하는 경우Zend PDO 오류 - 어떻게 디버그 할 수 있습니까?

SELECT events.idUser, szForename, szLastname, readers.szName, idZoneFrom, events.dtTime FROM events, users, readers WHERE events.idUser = users.idUser AND events.idReader = readers.idReader AND dtTime >= '2010:02:15 0:00:00' AND dtTime < '2010:02:16 0:00:00' ORDER BY dtTime 

쿼리가 확인 작업을 나는 표창에 의해 Zend_Db_Table를 확장하는 모델을 사용하여 실행하려고하면

$arResult = $this->getDefaultAdapter()->query($szQuery)->fetchAll(); 

는 1064 오류와 함께 간다 :

enter code here 

An error occurred 
Application error 
Exception information: 

Message: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 
Stack trace: 

#0 C:\xampp\htdocs\projekty\doors2\library\Zend\Db\Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array) 
#1 C:\xampp\htdocs\projekty\doors2\library\Zend\Db\Adapter\Abstract.php(468): Zend_Db_Statement->execute(Array) 
#2 C:\xampp\htdocs\projekty\doors2\library\Zend\Db\Adapter\Pdo\Abstract.php(238): Zend_Db_Adapter_Abstract->query('SELECT zoneName...', Array) 
#3 C:\xampp\htdocs\projekty\doors2\application\models\Zones.php(24): Zend_Db_Adapter_Pdo_Abstract->query('SELECT zoneName...') 
#4 C:\xampp\htdocs\projekty\doors2\application\models\Events.php(87): Application_Model_Zones->getZoneInfo(NULL) 
#5 C:\xampp\htdocs\projekty\doors2\application\controllers\IndexController.php(52): Application_Model_Events->getEventsList(NULL, '02/15/2010') 
#6 C:\xampp\htdocs\projekty\doors2\library\Zend\Controller\Action.php(513): IndexController->eventsAction() 
#7 C:\xampp\htdocs\projekty\doors2\library\Zend\Controller\Dispatcher\Standard.php(295): Zend_Controller_Action->dispatch('eventsAction') 
#8 C:\xampp\htdocs\projekty\doors2\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) 
#9 C:\xampp\htdocs\projekty\doors2\library\Zend\Application\Bootstrap\Bootstrap.php(97): Zend_Controller_Front->dispatch() 
#10 C:\xampp\htdocs\projekty\doors2\library\Zend\Application.php(366): Zend_Application_Bootstrap_Bootstrap->run() 
#11 C:\xampp\htdocs\projekty\doors2\public\index.php(26): Zend_Application->run() 
#12 {main} 

Request Parameters: 

array (
    'controller' => 'index', 
    'action' => 'events', 
    'module' => 'default', 
    'idUser' => '0', 
    'dt' => '02/15/2010', 
) 

가 어떻게이 문제를 찾기 위해 디버깅 할 수 있습니다 ?? 아니면 내가 뭘 잘못했는지 알아?

ps. 나는 PHP와 쿼리 테스트 모두에 대해 동일한 db 사용자를 사용합니다 ...

+1

Pls는 SELECT zoneName ...에 의해 시작된 SQL 쿼리를 게시합니다. 쿼리는 게시 된 쿼리가 아니라 오류의 원인입니다. –

+0

그래, 방금 결과 집합에서 작동하는 루프에서 오류가 발견되었습니다. 매개 변수 이름을 전달한 바보 같은 실수로 ID 대신 null이 생겼습니다. 어쨌든, 도와 줘서 고마워. :) – Moby04

답변

2

SQL 문에는 예약어가 있습니다. 자동으로 식별자를 피할 수 있도록 연결을 시도해야합니다. 그렇지 않으면 직접 수동으로해야합니다. 첫 번째 옵션의 경우,이 시도 : 여러 줄에 검색어를 깰 경우

$options = array(Zend_Db::AUTO_QUOTE_IDENTIFIERS => false); 
    $params = array(
     'host'   => 'host', 
     'username'  => 'user', 
     'password'  => 'secret', 
     'dbname'   => 'db', 
     'options'  => $options 
); 
    $db = Zend_Db::factory('Pdo_Mysql', $params); 
0

당신이 구문 오류가 어디 있는지에 대한 더 유용한 행 번호를받을 수 있습니다. 이것이 내 쿼리의 형식을 지정하는 방법입니다. 따라서 읽고, 유지 관리하고 디버깅하기가 훨씬 쉬워집니다.

SELECT 
    events.idUser, 
    szForename, 
    szLastname, 
    readers.szName, 
    idZoneFrom, 
    events.dtTime 
FROM events, 
    users, 
    readers 
WHERE events.idUser = users.idUser 
    AND events.idReader = readers.idReader 
    AND dtTime >= '2010:02:15 0:00:00' 
    AND dtTime < '2010:02:16 0:00:00' 
ORDER BY dtTime 
0

또한 권한과 관련하여 mysql은 사용자 + 호스트 기반 권한 시스템을 사용합니다. 따라서 특정 사용자는 localhost에서 데이터베이스 자원에 액세스 할 수 있지만 다른 시스템에서는 액세스 할 수 없습니다.

mysql 사용자 권한을 변경하는 방법에 대한 정보는 http://dev.mysql.com/doc/refman/5.0/en/grant.html을 확인하십시오.

0

zend를 사용하는 경우에는 전달되는 값을 준비해야합니다. 명령문에서 작동하면 예약어에 문제가 없어야합니다 (어떤 이유로 mysql 물론 별개입니다.)

관련 문제