Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php CDbCommand无法执行SQL语句:SQLSTATE[42000]:_Php_Mysql_Yii - Fatal编程技术网

Php CDbCommand无法执行SQL语句:SQLSTATE[42000]:

Php CDbCommand无法执行SQL语句:SQLSTATE[42000]:,php,mysql,yii,Php,Mysql,Yii,我正在尝试在我的yii应用程序上获取时间范围 这是我的模型: public function timeRange($attribute, $params) { $criteria = new CDbCriteria; $criteria->addCondition( "WHERE ('jam_keluar' > '{$this->jam_masuk}' OR 'jam_masuk' < '{$this-&

我正在尝试在我的yii应用程序上获取时间范围

这是我的模型:

public function timeRange($attribute, $params) {

        $criteria = new CDbCriteria;

        $criteria->addCondition(
                "WHERE ('jam_keluar' > '{$this->jam_masuk}' OR 'jam_masuk' < '{$this->jam_keluar}')".
                "OR ('jam_masuk' < '{$this->jam_keluar}' AND 'jam_keluar' > '{$this->jam_keluar}')"
            );

        $record = self::model()->exists($criteria);
        if(!empty($record)) {
            $this->addError('jd_id', 'Item already exists within range.');
            return false;
        }

    }
公共函数时间范围($attribute,$params){
$criteria=新的CDB标准;
$criteria->addCondition(
“其中('jam_keluar'>'{$this->jam_masuk}'或'jam_masuk'<'{$this->jam_keluar}')”。
“或('jam_masuk'<'{$this->jam_keluar}'和'jam_keluar'>'{$this->jam_keluar}')”
);
$record=self::model()->存在($criteria);
如果(!空($record)){
$this->addError('jd_id',范围内已存在项');
返回false;
}
}
但我得到了以下错误:

CDbCommand failed to execute the SQL statement: 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 'WHERE ('jam_keluar' > 03:00:00' OR 'jam_masuk' < '12:00:00')OR ('jam_masuk' < '1' at line 1. The SQL statement executed was: SELECT 1 FROM `a_jadwal` `t` WHERE WHERE ('jam_keluar' > 03:00:00' OR 'jam_masuk' < '12:00:00')OR ('jam_masuk' < '12:00:00' AND 'jam_keluar' > '12:00:00') LIMIT 1 
CDbCommand无法执行SQL语句:SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解在“WHERE”('jam_keluar'>03:00:00'或'jam_masuk'<'12:00:00')或第1行('jam_masuk'<'1')附近使用的正确语法。执行的SQL语句是:从'a_jadwal``t` WHERE('jam_keluar'>03:00:00'或'jam_masuk'<'12:00:00')或('jam_masuk'<'12:00:00'和'jam_keluar'>'12:00:00')限制1

有人吗?

少了一句话

$criteria->addCondition(
            "WHERE ('jam_keluar' > '{$this->jam_masuk}' OR 'jam_masuk' < '{$this->jam_keluar}')".
            "OR ('jam_masuk' < '{$this->jam_keluar}' AND 'jam_keluar' > '{$this->jam_keluar}')"
        );
公共函数时间范围($attribute,$params){

$criteria=新的CDBC标准;
$criteria->addCondition(
“其中('jam_keluar'>'{$this->jam_masuk}'或'jam_masuk'<'{$this->jam_keluar}')”。
“或('jam_masuk'<'{$this->jam_keluar}'和'jam_keluar'>'{$this->jam_keluar}')”
);
$record=self::model()->存在($criteria);
如果(!空($record)){
$this->addError('jd_id',范围内已存在项');
返回false;
}
否则{
返回true;
}
}


您在查询中遗漏了

您需要从addCondition中删除“WHERE”,因为addCondition将为您处理该问题。还可以用引号转义所有值,但不要在列名周围加引号

为此,应使用CDbCriteria::compare或至少使用带参数的addCondition,以避免SQL注入:

// Use the solution with CDbCriteria::addCondition
$criteria->addCondition(
    "WHERE (jam_keluar > :jam_masuk OR jam_masuk < :jam_keluar)".
    "OR (jam_masuk < :jam_keluar AND jam_keluar > :jam_keluar)",
    array(
        ':jam_masuk' => $this->jam_masuk,
        ':jam_keluar' => $this->jam_keluar
    )
);

// Or use the solution with CDbCriteria::compare
$criteria->compare('jam_keluar', '>'.$this->jam_masuk, false);
$criteria->compare('jam_masuk', '<'.$this->jam_keluar, false, 'OR');
$criteria->compare('jam_masuk', '<'.$this->jam_keluar, false, 'OR');
$criteria->compare('jam_keluar', '>'.$this->jam_keluar, false);
//将解决方案与CDbCriteria::addCondition一起使用
$criteria->addCondition(
“其中(jam_keluar>:jam_masuk或jam_masuk<:jam_keluar)”。
“或(jam_masuk<:jam_keluar和jam_keluar>:jam_keluar)”,
排列(
“:jam_masuk”=>this->jam_masuk,
':jam\u keluar'=>this->jam\u keluar
)
);
//或者将解决方案与CDbCriteria::compare一起使用
$criteria->compare('jam_keluar','>。$this->jam_masuk,false);
$criteria->compare('jam_masuk','.$this->jam_keluar,false);
$criteria = new CDbCriteria;

$criteria->addCondition(
        "WHERE ('jam_keluar' > '{$this->jam_masuk}' OR 'jam_masuk' < '{$this->jam_keluar}')".
        "OR ('jam_masuk' < '{$this->jam_keluar}' AND 'jam_keluar' > '{$this->jam_keluar}')"
    );

$record = self::model()->exists($criteria);
if(!empty($record)) {
    $this->addError('jd_id', 'Item already exists within range.');
    return false;
}
else {
    return true;
}
// Use the solution with CDbCriteria::addCondition
$criteria->addCondition(
    "WHERE (jam_keluar > :jam_masuk OR jam_masuk < :jam_keluar)".
    "OR (jam_masuk < :jam_keluar AND jam_keluar > :jam_keluar)",
    array(
        ':jam_masuk' => $this->jam_masuk,
        ':jam_keluar' => $this->jam_keluar
    )
);

// Or use the solution with CDbCriteria::compare
$criteria->compare('jam_keluar', '>'.$this->jam_masuk, false);
$criteria->compare('jam_masuk', '<'.$this->jam_keluar, false, 'OR');
$criteria->compare('jam_masuk', '<'.$this->jam_keluar, false, 'OR');
$criteria->compare('jam_keluar', '>'.$this->jam_keluar, false);