1

私の sql ステートメントは Zend で動作しません。Count(*) フィールドについて不平を言っています...何が間違っていますか?

// get open/closed
$stmt = $db->query('SELECT status, count(*) as total FROM reported_issues WHERE date_reported >= '.$today.' AND status IN (0,1) GROUP BY status');
while ($row = $stmt->fetch())
{
    switch ($row['status'])
    {
        case 0:
            $totalIssuesToday = $row['total'];
            break;

        case 1:
            $totalIssuesClosedToday = $row['total'];
            break;
    }
}

そしてエラー...

Fatal error: Uncaught exception 'Zend_Db_Statement_Exception' with message
'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Y' in 'where clause''
in C:\xampp\htdocs\dating\trunk\library\Zend\Db\Statement\Pdo.php:238

Stack trace:
#0 C:\xampp\htdocs\dating\trunk\library\Zend\Db\Statement.php(283): Zend_Db_Statement_Pdo->_execute(Array)
#1 C:\xampp\htdocs\dating\trunk\library\Zend\Db\Adapter\Abstract.php(484): Zend_Db_Statement->execute(Array)
#2 C:\xampp\htdocs\dating\trunk\library\Zend\Db\Adapter\Pdo\Abstract.php(235): Zend_Db_Adapter_Abstract->query('SELECT status, ...', Array)
#3 C:\xampp\htdocs\dating\trunk\html\siteadmin.php(59): Zend_Db_Adapter_Pdo_Abstract->query('SELECT status, ...')
#4 {main} thrown in C:\xampp\htdocs\dating\trunk\library\Zend\Db\Statement\Pdo.php on line 238
4

3 に答える 3

6

$today の値について他の人が指摘したことは別として、クエリでバインドされたパラメーターを使用する必要があります。

<?php

$stmt = $db->query(
    "SELECT status, count(*) as total
       FROM reported_issues
      WHERE date_reported >= ?
        AND status IN (0,1)
      GROUP BY status"
    ,array( $today )
);
于 2009-06-05T15:27:52.903 に答える
3

苦情は実際にはWHERE-- に関するもので、$today変数に必要と思われるものが含まれていないようです。具体的には、次のように書かれています。

'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Y' in 'where clause''

あなたの変数には、Yそこにあってはならない a が含まれているようです。は、このcount問題とは何の関係もないようです。

于 2009-06-05T15:21:56.893 に答える
3

$today 変数が壊れていると思います。最初の行を変更します (テスト用)

から

$stmt = $db->query('SELECT status, count(*) as total FROM reported_issues WHERE date_reported >= '.$today.' AND status IN (0,1) GROUP BY status');

に:

$sql='SELECT status, count(*) as total FROM reported_issues WHERE date_reported >= '.$today.' AND status IN (0,1) GROUP BY status';
try{
   $stmt = $db->query($sql);
} catch (Exception $e) {
   echo $sql."\n";
   throw $e;
}

次に、実行しようとしている生の SQL を確認できます。

于 2009-06-05T15:23:56.420 に答える