PHP PDO dblib参数未绑定

时间:2014-08-01 10:28:57

标签: php pdo prepared-statement

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

与数据库的连接正常。 一旦我尝试使用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);

返回一个空数组

根据文档的另一种尝试:(http://php.net/manual/en/pdostatement.execute.php

$dbh->prepare("SELECT * FROM Contacts WHERE ref = ?");
$sth->execute(array(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,连接到外部Microsoft 2008 SQL服务器。

我是以错误的方式做的吗?

1 个答案:

答案 0 :(得分:1)

来自PDOStatement::execute的文档:

  

input_parameters

     
    

一个值数组,其中包含与绑定参数一样多的元素     正在执行的SQL语句。所有值都被视为 PDO :: PARAM_STR

  

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

SELECT 1172 = '1172';