2015-01-21 50 views
1

我繼續將我的代碼從mysql_*改寫爲PDO,並在我這樣做的時候學習它,但我有點被這個問題困住了。當我運行它時,我的回答是空的[][][][]。這是舊代碼從mysql到PDO的轉換

$objConnect = mysql_connect("localhost","root",""); 
$objDB = mysql_select_db("mytable"); 
mysql_query("SET NAMES 'UTF8'"); 
$strSQL = "SELECT * FROM table"; 
$objQuery = mysql_query($strSQL); 
$intNumField = mysql_num_fields($objQuery); 
$resultArray = array(); 
while($obResult = mysql_fetch_array($objQuery)) 
{ 
    $arrCol = array(); 
    for($i=0;$i<$intNumField;$i++) 
    { 
     $arrCol[mysql_field_name($objQuery,$i)] = $obResult[$i]; 
    } 
    array_push($resultArray,$arrCol); 
} 

mysql_close($objConnect); 
echo json_encode($resultArray); 

而這正是我試圖

include 'database.php'; 
$pdo = Database::connect(); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$strSQL = "SELECT * FROM table"; 
$resultArray = array(); 
foreach($pdo->query($strSQL) as $res) 
{ 
    $arrCol = array(); 
    for($i=0;$i<$strSQL;$i++) 
    { 
     $arrCol[mysql_field_name($res,$i)] = $strSQL[$i]; 
    } 
    array_push($resultArray,$arrCol); 
} 
echo json_encode($resultArray); 

回答

2

不,mysql_field_name不會與您目前使用的PDO API混合。

只需使用PDO將其全部寫出即可。只需fetch()它並設置附加標誌PDO::FETCH_ASSOC。它將返回列名稱/不帶數字索引。

include 'database.php'; 
$pdo = Database::connect(); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$strSQL = 'SELECT * FROM table'; 

$resultArray = array(); 
$res = $pdo->query($strSQL); 
while($row = $res->fetch(PDO::FETCH_ASSOC)) { 
    $resultArray[] = $row; 
} 
echo json_encode($resultArray); 

附加信息:

您還可以通過使用->fetchAll()使用相同的標記省略循環:

$resultArray = $res->fetchAll(PDO::FETCH_ASSOC); 
+0

啊,我明白了。感謝您的回答,它幫助了我! – 2015-01-21 08:15:00

+0

@JasonPaddle肯定很高興這有助於 – Ghost 2015-01-21 08:15:13

+1

所以循環是爲了重新實現 - > fetchAll呢? – mario 2015-01-21 08:15:34