首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mysql PDO如何像这样绑定

mysql PDO如何像这样绑定
EN

Stack Overflow用户
提问于 2010-04-27 22:40:22
回答 7查看 22.1K关注 0票数 19

在此查询中

代码语言:javascript
复制
select wrd from tablename WHERE wrd LIKE '$partial%'

我正在尝试将变量'$partial%'与PDO绑定。最后,我不确定这与%是如何工作的。

会不会是

代码语言:javascript
复制
select wrd from tablename WHERE wrd LIKE ':partial%'

:partial绑定到$partial="somet"的位置

或者它会是

代码语言:javascript
复制
select wrd from tablename WHERE wrd LIKE ':partial'

:partial绑定到$partial="somet%"的位置

或者它会是完全不同的东西?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-04-27 23:12:40

你也可以说:

代码语言:javascript
复制
SELECT wrd FROM tablename WHERE wrd LIKE CONCAT(:partial, '%')

在MySQL末端连接字符串,在这种情况下没有任何特殊的原因。

如果要查找的部分wrd本身可以包含百分号或下划线字符(因为它们对LIKE操作符有特殊意义)或反斜杠(根据ANSI SQL标准,MySQL在LIKE操作符 - 中错误地使用了它作为另一层转义层),事情就会变得更复杂。

希望这不会影响你,但如果你真的需要正确的情况,这里有一个混乱的解决方案:

代码语言:javascript
复制
$stmt= $db->prepare("SELECT wrd FROM tablename WHERE wrd LIKE :term ESCAPE '+'");
$escaped= str_replace(array('+', '%', '_'), array('++', '+%', '+_'), $var);
$stmt->bindParam(':term', $escaped);
票数 36
EN

Stack Overflow用户

发布于 2010-04-27 23:00:25

代码语言:javascript
复制
$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();

使用问号参数:

代码语言:javascript
复制
$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

票数 17
EN

Stack Overflow用户

发布于 2017-03-06 20:37:15

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

代码语言:javascript
复制
$value = addcslashes($value, '%');
$stmt = $db->prepare('select * from products where description like ?');
$stmt->execute(["$value%"]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2722136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档