繁体   English   中英

PHP / MYSQL查询功能可多次使用

[英]PHP/MYSQL Query as a Function for Multi-Use

我正在尝试清理网站约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进行print_r而不是return,我会得到所有记录。 如何将所有记录传递到返回$ data中以在其他任何页面中访问?

或如果您碰巧对我可以实现而不是编写自己的功能的高度评价和真实测试的现有功能提出任何建议,请告诉我。

谢谢。

触发return ,该函数结束,并且不执行该函数后的所有其他代码行。 如果要将数据的返回延迟到该函数的后面,请创建一个变量,分配值,并在准备就绪时返回该变量。

例如,您可以修改代码以为$data创建数组,如下所示:

function dbGet($conn, $table, $select, $where, $cond) {
    $data = array();
    ...
    while ( $row = $result->fetch_assoc() ) {
        $data[] = $row;
    }
    $stmt->close();
    ...

    $db->close();

    return $data;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM