Php 使用LIKE语句执行时PDO的疯狂行为
我得到了这样的代码:Php 使用LIKE语句执行时PDO的疯狂行为,php,mysql,pdo,Php,Mysql,Pdo,我得到了这样的代码: $stmt = $pdo->prepare('SELECT * FROM table WHERE user LIKE :user'); 后来我 $stmt->bindValue(':user', '%'.$user.'%', PDO::PARAM_STR); $stmt->execute(); 而且它不起作用。我很确定这是使用MySQL执行LIKE语句的正确方法,但当我输入用户名的某个部分时,它不起作用,但当我输入完整用户名时,它就像一个符咒。 你知道
$stmt = $pdo->prepare('SELECT * FROM table WHERE user LIKE :user');
后来我
$stmt->bindValue(':user', '%'.$user.'%', PDO::PARAM_STR);
$stmt->execute();
而且它不起作用。我很确定这是使用MySQL执行LIKE语句的正确方法,但当我输入用户名的某个部分时,它不起作用,但当我输入完整用户名时,它就像一个符咒。
你知道为什么LIKE语句不想做一个简单的正则表达式吗?我在自己的代码中使用LIKE查询是:
$stmt = $pdo->prepare('SELECT * FROM table WHERE user LIKE CONCAT(\'%\', :user, \'%\')');
$stmt->bindValue(':user', $user, PDO::PARAM_STR);
$stmt->execute();
使用
CONCAT
强制MySQL在PDO转义$user变量后生成比较字符串。我在自己的代码中用于类似查询的是:
$stmt = $pdo->prepare('SELECT * FROM table WHERE user LIKE CONCAT(\'%\', :user, \'%\')');
$stmt->bindValue(':user', $user, PDO::PARAM_STR);
$stmt->execute();
使用
CONCAT
强制MySQL在PDO转义$user变量后生成比较字符串。这是正确的方法。确保已将PDO设置为在错误上引发PDO异常$PDO->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION)代码>绑定部分用户名时,结果为空,但绑定整个用户名时,结果有效。我想这样做,当我绑定用户名的一部分时,它也会产生一些结果。我还设置了抛出异常。PDO认为它工作正常。有没有办法在绑定后检查查询?别理它。我记得数据是通过SQL单独发送的…是的。我只是没有得到答案:)如果你愿意,你可以回答你自己的问题。这是正确的方法。确保已将PDO设置为在错误上引发PDO异常$PDO->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION)代码>绑定部分用户名时,结果为空,但绑定整个用户名时,结果有效。我想这样做,当我绑定用户名的一部分时,它也会产生一些结果。我还设置了抛出异常。PDO认为它工作正常。有没有办法在绑定后检查查询?别理它。我记得数据是通过SQL单独发送的…是的。我只是没有得到答案:)如果你愿意,你可以回答你自己的问题。