Php CDbCommand无法执行SQL语句:SQLSTATE[42000]:
我正在尝试在我的yii应用程序上获取时间范围 这是我的模型: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-&
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);