我遇到了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 ... AND尝试再次绑定它也不起作用。
有没有办法绑定多个具有相同名称的命名参数?
我试图不使用位置参数?代替
答案 0 :(得分:4)
理论上你可以开始模拟准备好的陈述。
您必须为您希望的每个值包含唯一的参数标记 调用PDOStatement :: execute()时传入语句。您 不能多次使用同名的命名参数标记 准备好的声明,除非启用仿真模式。
答案 1 :(得分:0)
说实话,我并不太了解MsSQL,但我确信在MySQL中有一些等同于User Defined Variables
的内容。您可以使用这些参数而不是我在本回答中描述的参数:
答案 2 :(得分:0)
只需打开仿真,将此设置从false更改为true:
$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);