Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 简单选择返回意外的结果_Php_Sql Server_Linux_Pdo_Odbc - Fatal编程技术网

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());