Mysql error 1064 如何在Yii框架中使用IN/AND子句?
我有一个MySQL表,有3列:ID、name、user。 我希望在Yii框架中使用以下SQL:Mysql error 1064 如何在Yii框架中使用IN/AND子句?,mysql-error-1064,yii,Mysql Error 1064,Yii,我有一个MySQL表,有3列:ID、name、user。 我希望在Yii框架中使用以下SQL: $sql = "SELECT * FROM my_table WHERE idName=".$name." AND user IN .$arrayOfUsers; // $arrayOfUsers is an array of int [0]->1, etc. 我尝试了三种不同的方法,但都没有成功: (一) 错误是: PHP错误[8] 数组到字符串的转换 (二) 错误是: PHP错误[8] 未
$sql = "SELECT * FROM my_table WHERE idName=".$name." AND user IN .$arrayOfUsers;
// $arrayOfUsers is an array of int [0]->1, etc.
我尝试了三种不同的方法,但都没有成功:
(一)
错误是:
PHP错误[8]
数组到字符串的转换
(二)
错误是:
PHP错误[8]
未定义的偏移量:0
(三)
错误是:
CDBEExceptionCDbCommand无法执行SQL
语句:SQLSTATE[42000]:语法错误或访问冲突:1064您
SQL语法有错误;检查相应的手册
在“idName=7”附近使用正确语法的MySQL服务器版本
在3号线。执行的SQL语句是:SELECT*FROM
my_表
其中(user
IN('1','2','3','4'))和
(idName=7)
试试这个
$criteria = new CDbCriteria();
$criteria->select = "*";
$criteria->condition = "idname = :name ";
$criteria->params = array (
':name' => $name,
);
$criteria->addInCondition('user', $arrayOfUsers);
my_table::model()->findAll($criteria);
有很多方法可以做,但我想用活动记录来处理这件事。 然而,您的问题是关于查询生成器的,我给您一个正确的答案 编辑:(作为您的注释,idName是大INT而不是var char) 1) 出现错误是因为您传递了
$arrayOfUsers
,它是数组,而不是sql中所需的字符串。应该是
$connection=Yii::app()->db;
$sql = "SELECT * FROM my_table WHERE idName=".$name." AND (user IN(".implode(',',$arrayOfUsers)."))";
$command = $connection->createCommand($sql);
$query = $command->queryAll();
2) 使用查询生成器
和where运算符
$query = Yii::app()->db->createCommand()
->select('*')
->from('my_table')
->where(array('in', 'user', $arrayOfUsers))
->andwhere('name = :name', array('idName'=>$name))
->queryAll();
3) 如果你想把它们包在一起,没关系,但它们看起来像这样难看
$query = Yii::app()->db->createCommand()
->select('*')
->from('my_table')
->where(array('and', 'idName= ' . $name, array('in', 'user', $arrayOfUsers)))
->queryAll();
更多关于如何使用官方文件中的where operator
的参考资料
// WHERE id=1 or id=2
where('id=1 or id=2')
// WHERE id=:id1 or id=:id2
where('id=:id1 or id=:id2', array(':id1'=>1, ':id2'=>2))
// WHERE id=1 OR id=2
where(array('or', 'id=1', 'id=2'))
// WHERE id=1 AND (type=2 OR type=3)
where(array('and', 'id=1', array('or', 'type=2', 'type=3')))
// WHERE `id` IN (1, 2)
where(array('in', 'id', array(1, 2))
// WHERE `id` NOT IN (1, 2)
where(array('not in', 'id', array(1,2)))
// WHERE `name` LIKE '%Qiang%'
where(array('like', 'name', '%Qiang%'))
// WHERE `name` LIKE '%Qiang' AND `name` LIKE '%Xue'
where(array('like', 'name', array('%Qiang', '%Xue')))
// WHERE `name` LIKE '%Qiang' OR `name` LIKE '%Xue'
where(array('or like', 'name', array('%Qiang', '%Xue')))
// WHERE `name` NOT LIKE '%Qiang%'
where(array('not like', 'name', '%Qiang%'))
// WHERE `name` NOT LIKE '%Qiang%' OR `name` NOT LIKE '%Xue%'
where(array('or not like', 'name', array('%Qiang%', '%Xue%')))
CDbExceptionCDbCommand无法执行SQL语句:SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“idName=”7')和(user IN('1','2','3','4'))附近使用的正确语法。执行的SQL语句是:SELECT*FROM
my_table
t
WHERE(idName=:idName)和(user-IN(:ycp0,:ycp1,:ycp2,:ycp3))idname字段是整数还是varchar?您在没有使用yii的情况下发布的简单sql查询是否正确执行?我尝试在该查询中键入phpmyadmin:从my_表中选择*,其中idname=7,user in(1,2,3,4),我有相同的错误!为什么?此外,phpmyadmin说:列名“idName”是MySQL保留的关键字。这可能是问题吗?是的,这是主要问题,先修复它,然后在yii1)CExceptionCDbCommand中尝试,它的行为没有名为“andwhere”的方法或闭包2)CDBEExceptionCDbCommand无法执行SQL语句:SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第3行中“idName=“7”)和(
user
IN('1','2','3','4'))附近使用的正确语法。执行的SQL语句是:从my_table
WHERE(idName=“7”)中选择*并且(user
IN('1','2','3','4'))在yii 1.1.13中添加andWhere()函数。看起来您使用的是yii的旧版本。更新框架或者你可以尝试我的解决方案1对不起,但我认为这不是一个Yii问题,但可能是一个MySQL问题
$query = Yii::app()->db->createCommand()
->select('*')
->from('my_table')
->where(array('in', 'user', $arrayOfUsers))
->andwhere('name = :name', array('idName'=>$name))
->queryAll();
$query = Yii::app()->db->createCommand()
->select('*')
->from('my_table')
->where(array('and', 'idName= ' . $name, array('in', 'user', $arrayOfUsers)))
->queryAll();
// WHERE id=1 or id=2
where('id=1 or id=2')
// WHERE id=:id1 or id=:id2
where('id=:id1 or id=:id2', array(':id1'=>1, ':id2'=>2))
// WHERE id=1 OR id=2
where(array('or', 'id=1', 'id=2'))
// WHERE id=1 AND (type=2 OR type=3)
where(array('and', 'id=1', array('or', 'type=2', 'type=3')))
// WHERE `id` IN (1, 2)
where(array('in', 'id', array(1, 2))
// WHERE `id` NOT IN (1, 2)
where(array('not in', 'id', array(1,2)))
// WHERE `name` LIKE '%Qiang%'
where(array('like', 'name', '%Qiang%'))
// WHERE `name` LIKE '%Qiang' AND `name` LIKE '%Xue'
where(array('like', 'name', array('%Qiang', '%Xue')))
// WHERE `name` LIKE '%Qiang' OR `name` LIKE '%Xue'
where(array('or like', 'name', array('%Qiang', '%Xue')))
// WHERE `name` NOT LIKE '%Qiang%'
where(array('not like', 'name', '%Qiang%'))
// WHERE `name` NOT LIKE '%Qiang%' OR `name` NOT LIKE '%Xue%'
where(array('or not like', 'name', array('%Qiang%', '%Xue%')))