2016-12-16 62 views
0

我目前使用ODBC PDO在Windows Server 2012 R2上使用PHP查询一个sybase数据库。当我运行一个典型的select语句,比如“SELECT * FROM sysobjects WHERE type ='U'”时,它看起来像是在抛出一个将前一个键的最后一个值作为当前键的第一个值的数组,如下所示:Sybase通过PHP查询重复值

“[UID] => 101 [2] => 101 [类型] => U [3] => U [userstat] => 0 [4] => 0 [SYSSTAT] => 0”

正如你所看到的,在索引[2]的开始处重复[uid]索引的“101”元素在索引[3]的开始处重复索引[2]结尾处的“=> U” ,等等 - 这贯穿整个阵列爆炸。这看起来不正确 - 有没有人有一个想法,为什么会发生这种情况,解决方案是什么(如果这是不正常的?)。如果有帮助,我会包含以下PHP:

<?php 

//[BD]---Display All Errors 
ini_set('display_errors', 1); 
ini_set('display_startup_errors', 1); 
error_reporting(E_ALL); 

echo "Boom! <br /><br />"; 

//[BD]---Try the Connection 
try { 

    //Connection Variables 
    $dsn = "odbc:Database"; 
    $username = "user"; 
    $password = "password"; 

    //Connection String 
    $conn = new PDO($dsn, $username, $password); 

    //Initiating Error Detection 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} 

//[BD]---Catch exceptions to the Try 
catch(Exception $e) { 
    echo "Invalid Connection"; 
    //Print Error Messages 
    die(print_r($e->getMessage())); 
} 

//[BD]---SQL Statement(s) 

/* 
----------List of Tables---------- 
*/ 

$stmt = $conn->prepare("SELECT * FROM sysobjects WHERE type = 'U'"); 

//[BD]---Execute SQL Statement 
$stmt->execute(); 
    while ($row = $stmt->fetch()) { 
     print_r($row); 
     echo "<br />"; 
    } 

echo "<br />Connected Successfully"; 
?> 

回答

1

这是正常现象。默认情况下,返回数组中的键包含字段名称和列号(基于0)。如果您只需要一个或另一个,则可以将fetch_style var设置为PDO :: FETCH_ASSOC仅使用名称作为键,或者将PDO :: FETCH_NUM用列号编索引。

这是第一个参数fetch作为记录@http://php.net/manual/en/pdostatement.fetch.php

+0

谢谢user3137702! – user4333011