Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP PDO dblib参数未绑定_Php_Pdo_Prepared Statement - Fatal编程技术网

PHP PDO dblib参数未绑定

PHP PDO dblib参数未绑定,php,pdo,prepared-statement,Php,Pdo,Prepared Statement,我必须连接到外部SQL数据库。 我正在使用PDO数据库库 与数据库的连接工作正常。 一旦我尝试使用prepare语句,就不会设置参数 $dbh = new PDO(sprintf('dblib:host=%s;dbname=%s',self::DB_HOST,self::DB_NAME), self::DB_USERNAME, self::DB_PASSWORD); $dbh->prepare("SELECT * FROM Contacts WHERE ref = :id"); $sth

我必须连接到外部SQL数据库。 我正在使用PDO数据库库

与数据库的连接工作正常。 一旦我尝试使用prepare语句,就不会设置参数

$dbh = new PDO(sprintf('dblib:host=%s;dbname=%s',self::DB_HOST,self::DB_NAME), self::DB_USERNAME, self::DB_PASSWORD);

$dbh->prepare("SELECT * FROM Contacts WHERE ref = :id");
$sth->execute(array(':id' => 1172));
$result =  $sth->fetchAll(PDO::FETCH_CLASS);
返回一个空数组

根据文档,另一次尝试:()

还返回一个空数组

第三次尝试不带参数:

$dbh->prepare("SELECT * FROM Contacts WHERE ref = 1172");
$sth->execute();
$result =  $sth->fetchAll(PDO::FETCH_CLASS);
是否返回结果

我还尝试了$sth->bindParam()和$sth->bindValue(),但没有得到任何结果

我在linux服务器上安装了dblib,连接到外部Microsoft2008SQL服务器

我做得不对吗?

来自以下文档:

输入参数

值的数组,其元素数与数组中的绑定参数数相同 正在执行的SQL语句。所有值都被视为PDO::PARAM_STR

最后一句话可能是您问题的根源:可能在您的数据库中
1172
不等于
'1172'
。从CLI检查以下查询的结果是否为
0

SELECT 1172 = '1172';

dblib支持准备好的查询吗?看起来是这样的。在寻找之后,我发现了一些别的东西。显然,我可以将bindParam与第三个参数一起使用$sth->bindParam(1,$value,PDO::PARAM_INT);返回结果。我仍然不明白为什么向execute()传递数组不起作用。传递第三个参数PDO::PARAM_INT解决了这个问题。谢谢
SELECT 1172 = '1172';