我需要获取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;
}
答案 0 :(得分:1)
不需要做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";
}
}
}
答案 1 :(得分:1)
我建议您将数据库连接作为函数参数传递,而不要使用global
声明。
fetch(PDO::FETCH_ASSOC)
返回一维关联数组或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";
}
}
我确实怀疑您的数据库表设计可能不是最佳的。通常,您需要一个稳定的列结构来增加行数。如果您的桌子在垂直和水平方向都在扩展,我想知道您的要求是什么。
答案 2 :(得分:-1)
您的处理方式有误... 当$ sql以mysqli作为关联数组返回时,它返回列名作为键...
因此:
$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";
}