Zend PDO Error - How Can I Debug It?

I have a weird problem using Zend Framework and Mysql. I generated a request:

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

The request works fine if I run it in some console, for example, pma, navicat or shell client, but when I try to run it using a model that extends Zend_Db_Table by command

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

it goes with error 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',
)  

How can I debug it to find the problem? Or maybe you know what I could have done wrong?

ps. I use the same db user for both php and request testing ...

+5
source share
4 answers

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);
+2

, , . . , .

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, .

http://dev.mysql.com/doc/refman/5.0/en/grant.html , mysql.

0

If you are using zend, you should at least prepare any passed values. If the statement works on the command line, then there should be no problems with reserved words (if for some reason the mysql versions are not of course, of course).

0
source

All Articles