Php 简单选择返回意外的结果
运行此代码将返回意外的结果Php 简单选择返回意外的结果,php,sql-server,linux,pdo,odbc,Php,Sql Server,Linux,Pdo,Odbc,运行此代码将返回意外的结果 <?php error_reporting(-1); try{ $pdo = new PDO('odbc:Driver={SQL Server Native Client 11.0};Server=192.168.178.11;Database=test;','sa', 'secret'); $s = $pdo->prepare('SELECT * FROM test'); if($s->execute()){
<?php
error_reporting(-1);
try{
$pdo = new PDO('odbc:Driver={SQL Server Native Client 11.0};Server=192.168.178.11;Database=test;','sa', 'secret');
$s = $pdo->prepare('SELECT * FROM test');
if($s->execute()){
var_dump($s->fetchAll());
}
$s = $pdo->prepare('SELECT * FROM test WHERE id = ?');
if($s->execute(array(1))){
var_dump($s->fetchAll());
}
}catch(Exception $e){
echo $e->xdebug_message;
}
正如您所看到的,第二条语句失败了
(请注意,我正在运行gentoo linux 64,并在win7 64虚拟机上连接到SQL server 2012)我使用MySQL获得第二条语句。您可能需要使用SQL server在语句之间释放与服务器的连接
$pdo = new PDO('odbc:Driver={SQL Server Native Client 11.0};Server=192.168.178.11;Database=test;','sa', 'secret');
$s = $pdo->prepare('SELECT * FROM test');
if($s->execute()){
var_dump($s->fetch());
}
$s->closeCursor();// ADD THIS for SQL Server
$s = $pdo->prepare('SELECT * FROM test WHERE id = ?');
if($s->execute(array(1))){
var_dump($s->fetch());
PS
fetch()
仅获取1行。您在var_dump()
中应该只有一个id。您是否收到任何错误消息?这似乎是针对nowjah解决的SQL Server unix ODBC驱动程序的一个错误。我后来将其更改为fetchAll(问题已更新),不起作用doh:(您是否尝试添加closeCursor())
在语句之间。正如我在回答中所说,我在MySQL中得到相同的var_dump()
结果,而不使用closeCursor()
。使用fetchAll()
或fetch()
都应该产生结果。@borrel尝试使用fetchAll()
进行查询。这两个语句都会产生所需的结果。
$pdo = new PDO('odbc:Driver={SQL Server Native Client 11.0};Server=192.168.178.11;Database=test;','sa', 'secret');
$s = $pdo->prepare('SELECT * FROM test');
if($s->execute()){
var_dump($s->fetch());
}
$s->closeCursor();// ADD THIS for SQL Server
$s = $pdo->prepare('SELECT * FROM test WHERE id = ?');
if($s->execute(array(1))){
var_dump($s->fetch());