PHP疑问:为何代码返回多维数组?需改为一维数组求解答
问题分析与解决方案
嘿,我瞅了下你的代码,问题其实很明显哒😉
为什么会变成多维数组?
你在while循环里写的$records2[] = $row(虽然代码没写完,但从逻辑能推断出来),是把mysqli_fetch_assoc返回的整条记录关联数组(比如['title' => 'xxx', 'fiction' => 'yyy']这种格式)逐个塞进$records2里,自然就生成了多维数组——因为数组的每个元素本身又是一个数组。
针对需求的两种解决方案
情况1:你只需要单条记录的一维数组(因为查询条件是id=$id,通常id是主键,只会返回一条数据)
完全不需要while循环,直接获取单条记录即可:
function getBook() { global $dbc; global $id; require('db.php'); // 注意:如果db.php已经初始化了数据库连接,这里的global $dbc可能重复,建议检查 // 去掉@错误抑制符,方便调试查询错误 $query = "SELECT title, fiction, publisher, summary, pages FROM bookShelf WHERE id=$id;"; $runQuery = mysqli_query($dbc, $query); // 直接获取单条记录,得到一维关联数组 $records2 = mysqli_fetch_assoc($runQuery); }
情况2:你需要把某个字段的值拼成一维数组(比如所有符合条件的书名列表)
循环里只push你需要的字段值就行:
function getBook() { global $dbc; global $id; require('db.php'); $query = "SELECT title, fiction, publisher, summary, pages FROM bookShelf WHERE id=$id;"; $runQuery = mysqli_query($dbc, $query); $records2 = array(); while ($row = mysqli_fetch_assoc($runQuery)) { // 这里以取title字段为例,最终得到['书名1', '书名2']这样的一维数组 $records2[] = $row['title']; // 如果需要拼接多个字段,也可以这么写: // $records2[] = $row['title'] . ' - ' . $row['publisher']; } }
额外小建议
- 别用
@错误抑制符,不然查询出错了你根本找不到问题根源,不利于调试; - 尽量避免使用
global,可以把$id作为函数参数传进去,代码会更健壮; - 强烈建议用预处理语句防止SQL注入,示例代码:
function getBook($id) { require('db.php'); $query = "SELECT title, fiction, publisher, summary, pages FROM bookShelf WHERE id=?"; $stmt = mysqli_prepare($dbc, $query); mysqli_stmt_bind_param($stmt, "i", $id); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); $records2 = mysqli_fetch_assoc($result); }
内容的提问来源于stack exchange,提问作者Eddy
相关产品推荐
相关产品推荐

