PHP MSSQL PDO-BindParam到多个类似通配符

时间:2018-09-11 10:56:35

标签: php sql-server pdo

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

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

$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();

这有效。

但是,如果我想通过更改$ sql变量在查询中多次使用:schbind,则:

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

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

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

为什么这不起作用?

1 个答案:

答案 0 :(得分: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