【问题标题】:PHP MSSQL PDO - BindParam to Multiple Like WildcardsPHP MSSQL PDO - 将参数绑定到多个类似的通配符
【发布时间】:2018-09-11 10:56:35
【问题描述】:

我有一个奇怪的问题,我认为很容易解决。

我正在简化上下文,但假设我有以下代码:

$schval = "Val";    
$schbind = "%".$schval."%";

$sql = "SELECT Col1, Col2, Col3 FROM MyTable WHERE Col1 LIKE :schbind";
$stmt = $conn->prepare($sql);
$stmt->bindparam(':schbind',$schbind);
$stmt->execute();
$rows = $stmt->fetchAll();

这行得通。

但是,如果我想在查询中多次使用 :schbind,请更改 $sql 变量,如下所示:

$sql = "SELECT Col1, Col2, Col3 FROM MyTable WHERE (Col1 LIKE :schbind OR Col2 LIKE :schbind)";

查询失败,因为它没有返回任何行。

正常的 SQL 逻辑告诉我这应该可以工作,即如果发现搜索值与 Col1 或 Col2 匹配,则返回该行。

为什么这不起作用?

【问题讨论】:

    标签: php sql-server pdo


    【解决方案1】:

    您不能两次使用一个占位符。你需要这样做:

    $stmt->bindparam(':schbind1',$schbind);
    $stmt->bindparam(':schbind2',$schbind);
    
    $sql = "SELECT Col1, Col2, Col3 FROM MyTable WHERE (Col1 LIKE :schbind1 OR Col2 LIKE :schbind2)";
    

    您可以阅读这篇文章以获得替代解决方案和进一步的解释: Use bound parameter multiple times

    【讨论】:

    • 感谢@steven 的超级快速回复,当然就是这么简单,我只是不知道!谢谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-08
    • 1970-01-01
    • 2019-09-16
    • 2016-06-29
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    相关资源
    最近更新 更多