gpt4 book ai didi

php - CDbCriteria 参数绑定(bind)

转载 作者:行者123 更新时间:2023-11-29 12:45:37 25 4
gpt4 key购买 nike

在 YII 应用程序的登录页面上,我设置了以下条件来验证用户:

$criteria->condition = 'uname ILIKE :username OR email_id ILIKE :username';
$criteria->params = array(':username' => $this->username);

如果我将反斜杠放在用户名文本字段中,它会抛出一个错误:

CDbCommand failed to execute the SQL statement: SQLSTATE[22025]: Invalid escape sequence: 7 ERROR: LIKE pattern must not end with escape character

我知道在 php 中有很多方法可以删除斜线,我想知道 YII 中有没有什么方法可以在与查询绑定(bind)时转义无效字符。

我可以用不同的方式写上面的条件,不会有任何问题

$criteria->compare('uname',$this->username,true,'OR');
$criteria->compare('email_id',$this->username,true,'OR');

但在那种情况下,它将使用“LIKE”而不是“ILIKE”构建查询。

这就是我必须正确使用 $criteria->condition 的原因。

最佳答案

进行不区分大小写匹配的常用方法是 lower(email_id) = lower(:username)。如果您需要索引查找,您甚至可以在 lower(email_id) 上创建表达式索引。

或者,使用 PostgreSQL 的 citext 类型。

LIKEILIKE 是采用通配符表达式模式匹配 运算符,而不仅仅是文字字符串。输入错误的原因如下:

"pattern\"

LIKE 表达式中的反斜杠转义下一个字符(将通配符 _% 转换为文字 _ %),因此如果没有下一个字符,则会出错。要了解更多信息,请参阅 pattern matching .

关于php - CDbCriteria 参数绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24568833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com