我正在尝试在网站的大约15个页面内清理大量的选择查询,并且我想使用一个函数,然后我可以使用它来调用所有不同的查询和表,将减少混乱。
我遇到了一个问题,似乎无法找到一种方法来解决问题。
这是功能:
function dbGet($conn, $table, $select, $where, $cond) {
require($conn);
if ( $stmt = $db->prepare(" SELECT $select FROM `" . $table . "` WHERE $where=? ")) {
$stmt->bind_param("i", $cond);
$stmt->execute();
$result = $stmt->get_result();
$rowNum = $result->num_rows;
if ( $rowNum > 0 ) {
while( $data = $result->fetch_assoc() ){
return $data;
}
}
$stmt->close();
} else {
die($db->error);
}
$db->close();
}
以下是我在各种不同页面中调用该函数的方法:
$settings = dbGet('php/connect.php', 'settings', '*', 'userId', $sessionId);
echo $settings->toName;
我遇到的问题是它只显示设置表中的第一条记录。我以为在函数中使用while循环会返回所有记录。事实上,如果我为$ data而不是return返回print_r,我会获得所有记录。如何将所有记录传递到要在任何其他页面中访问的返回$数据?
OR 如果你们碰巧有任何关于现有功能的建议,这些功能得到了高度重视和真实测试,我可以实现而不是自己编写,请告诉我。
感谢。
答案 0 :(得分:1)
当触发return
时,函数结束,并且不执行任何其他代码行。如果要延迟数据的返回直到函数的后期,则创建变量,赋值,并在准备好后返回变量。
例如,您可以调整代码以为$data
创建数组,如下所示:
function dbGet($conn, $table, $select, $where, $cond) {
$data = array();
...
while ( $row = $result->fetch_assoc() ) {
$data[] = $row;
}
$stmt->close();
...
$db->close();
return $data;
}