从准备好的语句函数PHP

时间:2017-01-02 23:17:25

标签: php mysql function prepared-statement

我在网站上有多个页面需要来自表格的相同数据。因此,我不想在每个页面上写出一个sql语句,而是要编写一个函数。

这是我的功能:

function getInfo($u_id) {

    global $conn;
    $stmt = $conn->prepare("SELECT report.*, users.* FROM report INNER JOIN users ON report.report_user_id=users.user_id WHERE report_user_id = ? ORDER BY report_id DESC LIMIT 5") or die ('Problem Preparing Query');
    $stmt->bind_param("i", $u_id);
    $stmt->execute();

    $result = $stmt->get_result();
    while($row = $result->fetch_assoc()) {

        //reports
        $report_user_id     = $row['report_user_id'];   
        $rep_date           = $row['rep_date'];
        $rep_location       = $row['rep_location'];
        $rep_notes          = $row['rep_notes'];

        //users 
        $user_id            = $row['user_id'];
        $username           = $row['username'];
        $fname              = $row['user_firstname'];  
        $lname              = $row['user_lastname'];
        $user_email         = $row['user_email'];
        $user_image         = $row['user_image'];
        $user_number        = $row['user_number']; 
    }
    $stmt->close();
}

该函数有效,因为它从表中获取数据,但我不知道如何输出变量。我在函数中使用预准备语句的任何示例都是将数据插入表而不是获取数据。

我已经尝试绑定结果,创建一个数组,返回每个变量,但在每种情况下我都有错误或者只能返回第一个变量。

当我尝试使用其中一个获取的变量时,该函数不会自行抛出任何错误,而是在我的网页上,它告诉我它是未定义的。

 $u_id = 1;
 getInfo($u_id);

<a class="text-inherit" href="profile/index.html"><?php echo $fname .' '. $lname; ?></a>


Notice: Undefined variable: fname in....

所以我的问题是,如何获取已在此函数中获取的变量?

3 个答案:

答案 0 :(得分:1)

当然它不起作用,因为$fname$lname是该函数中的局部变量,当函数返回时它们就消失了。

将所有这些内容放入数组中,然后将它们返回或放在$GLOBAL内。

答案 1 :(得分:1)

function getInfo($u_id) {
    global $conn;

    $stmt = $conn->prepare("SELECT report.*, users.* FROM report INNER JOIN users ON report.report_user_id=users.user_id WHERE report_user_id = ? ORDER BY report_id DESC LIMIT 5") or die ('Problem Preparing Query');
    $stmt->bind_param("i", $u_id);
    $stmt->execute();
    $rows = [];
    $result = $stmt->get_result();

    while($row = $result->fetch_assoc()) {
        $rows[] = $row;
    }

    $stmt->close();   
    return $rows;
}

答案 2 :(得分:0)

以下是单行结果解决方案:

function getInfo($u_id){
  global $conn;
  $stmt = $conn->query("SELECT * FROM report INNER JOIN users ON report.report_user_id=users.user_id WHERE report.report_user_id=$u_id ORDER BY DESC LIMIT 1") || die ('Problem Preparing Query');
  if($stmt->num_rows > 0){
    return $stmt->fetch_object();
  }
  else{
    // no results were found
  }
  return false;
}
$obj = getInfo($u_id);
if($obj){
  echo "<a class='text-inherit' href='profile/index.html'>{$obj->user_firstname} {$obj->user_lastname}</a>";
}