从 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()
);
我将继续重写我的代码,从 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()
);