PHP / MYSQL查询作为多用途的函数

时间:2017-07-24 14:11:19

标签: php mysql function

我正在尝试在网站的大约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 如果你们碰巧有任何关于现有功能的建议,这些功能得到了高度重视和真实测试,我可以实现而不是自己编写,请告诉我。

感谢。

1 个答案:

答案 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;
}