PHP PDO dblib参数未绑定
我必须连接到外部SQL数据库。 我正在使用PDO数据库库 与数据库的连接工作正常。 一旦我尝试使用prepare语句,就不会设置参数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
$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';