Mysql error 1064 如何在Yii框架中使用IN/AND子句?

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] 未

我有一个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] 未定义的偏移量: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%')))