PHP PDO绑定参数/绑定值多次[重复]

qnakjoqk  于 2022-12-10  发布在  PHP
关注(0)|答案(3)|浏览(187)

此问题在此处已有答案

Use bound parameter multiple times(5个答案)
三年前就关门了。
ODBC的PDO语句有问题。
我在Windows Server 2003和PHP 5.4.x中使用SQL SERVER 7
例如:
我有查询:
(this不是实际的查询,但它适用于示例)

$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 ...的第一个匹配项,并且尝试再次绑定它也不起作用。
有没有办法绑定多个同名的命名参数?
我尝试不使用位置参数,而是使用?

unftdfkk

unftdfkk1#

理论上,您可以启用预准备语句的模拟。
当您呼叫PDOStatement::execute()时,您必须为每个要传入陈述式的值包含唯一的参数标记。除非开启仿真模式,否则您无法在已准备陈述式中多次使用相同名称的具名参数标记。
http://www.php.net/manual/en/pdo.prepare.php

guicsvcw

guicsvcw2#

老实说,我对MsSQL了解不多,但我很确定MySQL中有一些与User Defined Variables等效的函数。您可以使用这些函数来代替我在下面的答案中描述的参数:
https://stackoverflow.com/a/31068865/3391783

anhgbhbe

anhgbhbe3#

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

$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);

相关问题