Tab*_*Tab 3 yii mysql-error-1064
我有一个包含3列的MySQL表: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.
Run Code Online (Sandbox Code Playgroud)
我试过三种不同的方式,但没有成功:
1)
$sql = "SELECT * FROM my_table WHERE idName=".$name." AND user IN .$arrayOfUsers;
$command = $connection->createCommand($sql);
$dataReader = $command->query();
$query = $dataReader->readAll();
Run Code Online (Sandbox Code Playgroud)
错误是:
PHP错误[8]
数组到字符串转换
2)
$query = Yii::app()->db->createCommand()
->select('*')
->from('my_table')
->where(array('and', array('in', 'user', $arrayOfUsers), array('idName' => $name)))
->queryAll();
Run Code Online (Sandbox Code Playgroud)
错误是:
PHP错误[8]
未定义的偏移量:0
3)
$query = Yii::app()->db->createCommand()
->select('*')
->from('my_table')
->where(array('and', array('in', 'user', $arrayOfUsers), 'idName='.$name)))
->queryAll();
Run Code Online (Sandbox Code Playgroud)
错误是:
CDbException
CDbCommand无法执行SQL语句:SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法中有错误; 检查与MySQL服务器版本对应的手册,以便在第3行使用"idName = 7"附近的正确语法.执行的SQL语句为:SELECT*FROM
my_tableWHERE(userIN('1','2','3) ','4'))AND(idName = 7)
Tel*_*yen 12
有很多方法可以做,但我想使用Active Record来处理这个问题.但是,您的问题是围绕查询生成器,我给你正确的
编辑:(作为您的评论,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();
Run Code Online (Sandbox Code Playgroud)
2)使用Query builder和where operator
$query = Yii::app()->db->createCommand()
->select('*')
->from('my_table')
->where(array('in', 'user', $arrayOfUsers))
->andwhere('name = :name', array('idName'=>$name))
->queryAll();
Run Code Online (Sandbox Code Playgroud)
3)如果你想把它们包在一起,那就没事了,但它们看起来很难看
$query = Yii::app()->db->createCommand()
->select('*')
->from('my_table')
->where(array('and', 'idName= ' . $name, array('in', 'user', $arrayOfUsers)))
->queryAll();
Run Code Online (Sandbox Code Playgroud)
更多参考如何使用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%')))
Run Code Online (Sandbox Code Playgroud)
http://www.yiiframework.com/doc/guide/1.1/en/database.query-builder