不能在pdo + odbc + Ms Sql db设置中使用prepare语句

时间:2014-08-05 14:32:54

标签: php sql-server pdo

我按照这里的说明进行了

Accessing Microsoft SQL Server from PHP on Ubuntu using PDO, ODBC and FreeTDS

设置odbc。

然后不知怎的,我得到了它但不完全。如果我使用完整的查询语句,则返回

结果正确,但如果我稍后绑定数据,则没有来自DB端的响应......我只是得到了chrome

“未收到任何数据”页面。

Environment: PHP Version 5.3.2-1  ubuntu4.26

我的代码:

$conn=new PDO("odbc:Driver=FreeTDS; Server=Mssql host; Port=1433;
 Database=dbname; UID=userid; PWD=pw");

如果我使用它:

$sql="Select * from customer where email='abc@gmail.com'";

$stmt=$conn->prepare($sql);
$stmt->execute();
$row=$stmt->fetch(PDO::FETCH_ASSOC);
print_r($row);

它正确地从DB中获取数据。

但如果我使用这个

$sql="Select * from customer where email= ? ";

$stmt=$conn->prepare($sql);
$stmt->execute(array('abc@gmail.com'));
$row=$stmt->fetch(PDO::FETCH_ASSOC);
print_r($row);

我通过悲伤的面部图标获得了“没有收到数据”的链接。

我试着抓住这些代码,但是......在这种情况下它没有帮助。

我不知道在odbc设置期间我是否遗漏了某些内容,或者是其他内容。

实际上,我想知道你们使用哪种驱动程序/方式使用 MS SQL DB (2008)和

Linux(ubuntu)环境?我在开始时使用dblib(并且它可以工作)但是在

之后

阅读更多,我发现PHP并不建议人们使用dblib,他们认为我们应该使用

odbc,但它确实不起作用。

1 个答案:

答案 0 :(得分:0)

您的连接变量的名称不同:

$conn=new PDO("odbc:Driver=FreeTDS; Server=Mssql host; Port=1433;
 Database=dbname; UID=userid; PWD=pw");

然后你有

$stmt=$connNc->prepare($sql);

它们必须相同。