Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.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 如何区分大小写where()';在';将yii2与mysql数据库匹配_Php_Mysql_Yii_Yii2 - Fatal编程技术网

Php 如何区分大小写where()';在';将yii2与mysql数据库匹配

Php 如何区分大小写where()';在';将yii2与mysql数据库匹配,php,mysql,yii,yii2,Php,Mysql,Yii,Yii2,我在mysql数据库中有一个hashtags表,其中有一个string(512)列,名为tag。我想使用Yii2的ActiveQuery进行区分大小写的搜索,如下所示: $expTags = ['one','two','three']; Hashtag::find()->where(["IN","tag",$expTags])->select(["id"]); 在mysql中,这通常意味着在每个值之外加上二进制前缀,或者在列名前面加上前缀。我两个都试过了,我甚至试过“二进制”,都没

我在mysql数据库中有一个hashtags表,其中有一个
string(512)
列,名为
tag
。我想使用Yii2的ActiveQuery进行区分大小写的搜索,如下所示:

$expTags = ['one','two','three'];
Hashtag::find()->where(["IN","tag",$expTags])->select(["id"]);
在mysql中,这通常意味着在每个值之外加上二进制前缀,或者在列名前面加上前缀。我两个都试过了,我甚至试过“二进制”,都没用

如何做到这一点?我需要区分大小写的搜索,我不想仅仅为了这样做而修改表/列排序规则

您可以尝试以下方法:

$expTags = ['one','two','three'];
Hashtag::find()->where(["BINARY IN","tag",$expTags])->select(["id"]);


前面的答案非常接近:

中的二进制文件(用作运算符)导致语法错误(至少对于mysql)

这就击中了目标

但是,这将起作用:

Hashtag::find()->where(['BINARY(`tag`)' => $expTags])->select(["id"]);

我试过这种方法。我显然是在另一个更复杂的查询中使用上述查询。当我运行查询时,我得到位置SQL参数错误,如“参数3应为整数,但您正在发送字符串”。请注意,我实际上在查询中只发送了两个参数。
$expTags = ['one','two','three'];
Hashtag::find()->where(["BINARY IN","tag",$expTags])->select(["id"]);
Hashtag::find()->where('BINARY tag in(:tag)', ['tag'=> $expTags])->select(["id"]);
Hashtag::find()->where(['BINARY(`tag`)' => $expTags])->select(["id"]);