从 mysql 到 PDO 的转换

Conversion from mysql to 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);

不,mysql_field_name 不与您当前使用的 PDO API 混合。

全程使用 PDO 编写即可。只需 fetch() 它并设置附加标志 PDO::FETCH_ASSOC。它将 return 它带有列名/没有数字索引。

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);
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo json_encode(
    $pdo->query(
        'SELECT * FROM soFoo'
    )->fetchAll()
);

http://docs.php.net/pdostatement.fetchall