PHP MSSQL PDO - BindParam到多个像通配符

问题描述 投票:0回答:1

我有一个奇怪的问题,我假设很容易修复。

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

$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个回答
2
投票

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

$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

© www.soinside.com 2019 - 2024. All rights reserved.