如何使用 PDO 从单行结果集中获取列名和值?
How to get column names and values from a single-row resultset with PDO?
我需要获取 id
= $id
.
行中的所有列名和值
列名应回显为 title
;值应回显为 story
像这样:
function story($id) {
global $db;
$sql = "select * from users where id = :aid limit 1";
$st = $db->prepare($sql);
$st -> execute([":aid" => $id]);
$row = $st->fetch();
$sql = // select all column names;
$columns = // array - result of $sql
$story = "";
foreach ($columns as $el) {
$i = array_search($el, $columns);
$val = $row[$i];
$story .=
"<div class='title'>" . $el . "</div>\n" .
"<div class='story'>" . $val . "</div>\n";
}
echo $story;
}
你的做法有点不对...
当 $sql returns 以 mysqli 作为关联数组时,它 returns 列名作为键...
因此:
$columns = // array - result of $sql as an assoc array
$story = "";
foreach ($columns as $key => value) {
$story .=
"<div class='title'>" . $key . "</div>\n" .
"<div class='story'>" . $value . "</div>\n";
}
不需要做array_search()
,按照下面的方式做:-
function story($id) {
global $db;
$sql = "select * from users where id = :aid limit 1";
$st = $db->prepare($sql);
$st -> execute([":aid" => $id]);
$row = $st->fetch(PDO::FETCH_ASSOC);
if(count($row)>=1){
foreach ($row as $column => $value) {
echo "<div class='title'>" . $column . "</div>\n" .
echo "<div class='story'>" . $value. "</div>\n";
}
}
}
我建议您将数据库连接作为函数参数传递,而不是使用 global
声明。
fetch(PDO::FETCH_ASSOC)
returns 一维关联数组或 false
.
http://php.net/manual/en/pdostatement.fetch.php
在 sql 关键字上使用大写可以提高可读性。
我已经删除了 LIMIT 子句,但是如果您的 id
列是 PRIMARY KEY,则该限制将无关紧要。
function story($db, $id) {
$st = $db->prepare("SELECT * FROM users WHERE id = :aid");
$st->execute([":aid" => $id]);
if (!$row = $st->fetch(PDO::FETCH_ASSOC)) {
echo "no row found";
}
foreach ($row as $key => $val) {
echo "<div class='title'>" . $key . "</div>\n";
echo "<div class='story'>" . $val . "</div>\n";
}
}
我确实怀疑您的数据库 table 设计可能不是最佳的。通常,您需要一个允许行数增加的 stable 列结构。如果您的 table 是垂直和水平扩展,我想知道您的要求是什么。
我需要获取 id
= $id
.
列名应回显为 title
;值应回显为 story
像这样:
function story($id) {
global $db;
$sql = "select * from users where id = :aid limit 1";
$st = $db->prepare($sql);
$st -> execute([":aid" => $id]);
$row = $st->fetch();
$sql = // select all column names;
$columns = // array - result of $sql
$story = "";
foreach ($columns as $el) {
$i = array_search($el, $columns);
$val = $row[$i];
$story .=
"<div class='title'>" . $el . "</div>\n" .
"<div class='story'>" . $val . "</div>\n";
}
echo $story;
}
你的做法有点不对... 当 $sql returns 以 mysqli 作为关联数组时,它 returns 列名作为键...
因此:
$columns = // array - result of $sql as an assoc array
$story = "";
foreach ($columns as $key => value) {
$story .=
"<div class='title'>" . $key . "</div>\n" .
"<div class='story'>" . $value . "</div>\n";
}
不需要做array_search()
,按照下面的方式做:-
function story($id) {
global $db;
$sql = "select * from users where id = :aid limit 1";
$st = $db->prepare($sql);
$st -> execute([":aid" => $id]);
$row = $st->fetch(PDO::FETCH_ASSOC);
if(count($row)>=1){
foreach ($row as $column => $value) {
echo "<div class='title'>" . $column . "</div>\n" .
echo "<div class='story'>" . $value. "</div>\n";
}
}
}
我建议您将数据库连接作为函数参数传递,而不是使用 global
声明。
fetch(PDO::FETCH_ASSOC)
returns 一维关联数组或 false
.
http://php.net/manual/en/pdostatement.fetch.php
在 sql 关键字上使用大写可以提高可读性。
我已经删除了 LIMIT 子句,但是如果您的 id
列是 PRIMARY KEY,则该限制将无关紧要。
function story($db, $id) {
$st = $db->prepare("SELECT * FROM users WHERE id = :aid");
$st->execute([":aid" => $id]);
if (!$row = $st->fetch(PDO::FETCH_ASSOC)) {
echo "no row found";
}
foreach ($row as $key => $val) {
echo "<div class='title'>" . $key . "</div>\n";
echo "<div class='story'>" . $val . "</div>\n";
}
}
我确实怀疑您的数据库 table 设计可能不是最佳的。通常,您需要一个允许行数增加的 stable 列结构。如果您的 table 是垂直和水平扩展,我想知道您的要求是什么。