3

我对 ODBC 的 PDO 语句有疑问。

我在 Windows Server 2003 和 PHP 5.4.x 中使用 SQL SERVER 7

例如:

我有一个查询:

(这不是实际的查询,但它适用于示例)

$query = SELECT * FROM table WHERE number = :number OR number = :number

在我的 php 中,我有:

$conn = new PDO($connectionString);

$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$statement = $conn->prepare($query);

$statement->bindParam(':number', $someNumber);

$statement->execute();

这会引发错误

COUNT field incorrect or syntax error

问题是,bindParam 只绑定 :number ... 的第一次出现,并且尝试再次绑定它也不起作用。

有没有办法绑定多个具有相同名称的命名参数?

我试图不使用位置参数使用 ? 反而

4

3 回答 3

5

理论上,您可以打开对准备好的语句的模拟。

当您调用 PDOStatement::execute() 时,您必须为希望传递给语句的每个值包含一个唯一的参数标记。您不能在准备好的语句中多次使用同名的命名参数标记,除非打开了仿真模式。

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

于 2014-06-30T04:07:21.690 回答
1

老实说,我对 MsSQL 了解不多,但我很确定User Defined Variables在 MySQL 中有一些等价物。您可以使用这些而不是我在此答案中描述的参数:

https://stackoverflow.com/a/31068865/3391783

于 2015-10-01T09:42:59.527 回答
0

只需打开仿真,将此设置从 false 更改为 true:

$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
于 2015-10-01T10:00:48.563 回答