【问题标题】:(Yii)CDbCommand failed to execute the SQL statement: SQLSTATE[42000]: Syntax error or access violation:(Yii)CDbCommand 执行 SQL 语句失败:SQLSTATE[42000]: 语法错误或访问冲突:
【发布时间】:2014-12-10 02:34:52
【问题描述】:

我正在尝试执行此 sql 查询,但发生异常...我在 PhpMyAdmin 中尝试了该查询,它运行正常。

<?php
        $criteria=new CDbCriteria;
        $criteria->condition='select min(purchase_order_id) from purchase_order where purchase_order_id >'.$model->purchase_order_id;
        $nextfield = \POrder::model()->model()->findAll($criteria);
           ?>

例外是, CDbCommand 执行 SQL 语句失败:SQLSTATE[42000]: Syntax error or access violation: 1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'select min(purchase_order_id) from purchase_order where purchase_order_id >65' 附近使用正确的语法。执行的 SQL 语句是:SELECT * FROM purchase_order t WHERE select min(purchase_order_id) from purchase_order where purchase_order_id >65

【问题讨论】:

  • 这是一个错误的帖子对不起......但我仍然认为这不是 where 子句。
  • 我相信这个想法是$criteria-&gt;condition用于build the where clause,而不是指定整个查询。
  • 我可以做些什么来执行我的查询?

标签: php mysql sql yii


【解决方案1】:

如果您只想要查询结果,请执行以下操作:

Yii::app()->db->createCommand("
SELECT MIN(purchase_order_id) FROM purchase_order
WHERE purchase_order_id > :purchase_order_id
")->queryScalar(array('purchase_order_id'=>$model->purchase_order_id'));

这将完全返回您从 phpmyadmin 或 mysql 工作台获得的单个值。

如果您想要与该 purchase_order_id 对应的型号记录,则可以执行以下操作:

$criteria=new CDbCriteria;
$criteria->addCondition("t.purchase_order_id = (
SELECT MIN(purchase_order_id)
FROM purchase_order
WHERE purchase_order_id > :previous_purchase_order_id)");
$criteria->params['previous_purchase_order_id'] = $model->purchase_order_id;
$nextfield = \POrder::model()->model()->find($criteria);

我假设只有一个这样的模型,所以我将findAll 更改为find

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 2023-04-01
    • 2018-05-31
    • 1970-01-01
    相关资源
    最近更新 更多