我必须连接到外部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服务器。
我是以错误的方式做的吗?
答案 0 :(得分:1)
来自PDOStatement::execute的文档:
input_parameters
一个值数组,其中包含与绑定参数一样多的元素 正在执行的SQL语句。所有值都被视为 PDO :: PARAM_STR 。
最后一句可能是您问题的根源:可能在您的数据库中1172
不等于'1172'
。如果以下查询的结果为0
,请从CLI检查:
SELECT 1172 = '1172';