mysql PDO如何绑定LIKE

时间:2010-04-27 14:40:22

标签: database mysql pdo mysqli

在此查询中

select wrd from tablename WHERE wrd LIKE '$partial%'

我正在尝试将变量'$partial%'与PDO绑定。不确定这最终如何与%一起使用。

是不是

select wrd from tablename WHERE wrd LIKE ':partial%'

其中:partial绑定到$partial="somet"

还是

select wrd from tablename WHERE wrd LIKE ':partial'

其中:partial绑定到$partial="somet%"

或者它会完全不同吗?

7 个答案:

答案 0 :(得分:28)

你也可以说:

SELECT wrd FROM tablename WHERE wrd LIKE CONCAT(:partial, '%')

在MySQL端进行字符串连接,而不是在这种情况下有任何特殊原因。

如果您要查找的部分wrd本身包含百分比或下划线字符(因为它们对LIKE运算符具有特殊含义)或反斜杠(MySQL用作另一个层),事情会变得有点棘手在LIKE运算符中转义 - 根据ANSI SQL标准不正确。)

希望这对您没有影响,但如果您确实需要正确处理,那么这是一个混乱的解决方案:

$stmt= $db->prepare("SELECT wrd FROM tablename WHERE wrd LIKE :term ESCAPE '+'");
$escaped= str_replace(array('+', '%', '_'), array('++', '+%', '+_'), $var);
$stmt->bindParam(':term', $escaped);

答案 1 :(得分:15)

$var = "partial%";
$stmt = $dbh->prepare("select wrd from tablename WHERE wrd LIKE :partial");
$stmt->bindParam(":partial", $var);
$stmt->execute(); // or $stmt->execute(array(':partial' => $var)); without 
                  // first calling bindParam()
$rs = $stmt->fetchAll();

使用问号参数:

$stmt = $dbh->prepare('select wrd from tablename WHERE wrd LIKE ?');
$stmt->execute(array('partial%'));
$rs = $stmt->fetchAll();

http://www.php.net/manual/en/pdo.prepare.php

答案 2 :(得分:0)

您可以在准备好的语句之前使用addcslashes。我测试了mysql。

$value = addcslashes($value, '%');
$stmt = $db->prepare('select * from products where description like ?');
$stmt->execute(["$value%"]);

答案 3 :(得分:0)

我认为(@bobince提供的)答案可以简化一些。

您可以将其简化为这样,以处理参数中的下划线,百分比等,但仍将LIKE查询与部分%匹配:

$stmt = $dbh->prepare("select wrd from tablename WHERE wrd LIKE :partial");
$stmt->execute([":partial" => addcslashes($value, '_%') . "%"]);
$rows = $stmt->fetchAll();

答案 4 :(得分:-1)

以下代码仅显示数据库中的第一个关键字!

"SELECT wrd FROM tablename WHERE wrd LIKE CONCAT(:partial, '%')"

如果要搜索数据库中的所有关键字,请尝试使用此选项

"SELECT wrd FROM tablename WHERE wrd LIKE :partial";
$stmt->execute(array(':partial'=>'%'.$YourVarHere.'%'));

答案 5 :(得分:-2)

这就是你应该这样做的方式

bindValue(':partial', '%' . $_GET['partial'] . '%');

谢谢,

的Qwerty

答案 6 :(得分:-4)

谁编写了answare(可能是karim79):

$var ="partial%"
$stmt =$dbh->prepare("select wrd from tablename WHERE wrd LIKE :partial")
$stmt->bindParam(":partial",$var)
$stmt->execute(); //or$stmt->execute(array(':partial'=>$var)); without 
                  // first calling bindParam()
$rs =$stmt->fetchAll();
     

使用问号参数:

$stmt =$dbh->prepare('select wrd from tablename WHERE wrd LIKE ?');
$stmt->execute(array('partial%'));
$rs =$stmt->fetchAll();

非常感谢他。我正在寻找代码&看了很多例子,但我无法解决我的问题。这次我成功了。我使用了代码的'使用问号参数:'部分。

对于其他人的帮助,如果要从变量中检索值,可以将代码更改为

$stmt->execute(array($variable.'%'));

而不是

$stmt->execute(array('partial%'));

因为答案中指定了“部分”一词,因此无法更改。非常感谢。