php - 从 mysql 到 PDO 的转换

标签 php 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);

最佳答案

不,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);

关于php - 从 mysql 到 PDO 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28062323/

相关文章:

php - 未定义索引 : usersJSON on line 6 []

php -\通过表单上传链接到数据库时添加

MySQL 将列字符集重置为默认值

php - MySQL 存储过程参数验证

javascript - parse_str 将下划线添加到索引并附加值

javascript - ajax响应后执行soundmanager2

PHPExcel 1.8.0 - 通过克隆模板表创建许多工作表,每次克隆都会变慢

php - 从 mysql 数据库检索文本

PHP - PDO 参数编号无效

sql - 从 PG_query 移动到 PDO 的 SELECT 问题