2017-01-02 111 views
0

我在一個網站上有多個頁面需要來自表格的相同數據。因此,我不想在每個頁面上寫出一條sql語句,而想寫一個函數。從準備好的語句函數返回變量PHP

這裏是我的功能:

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.... 

所以我的問題是,如何才能得到已在此功能已經獲取的變量?

+0

你想要一個表?創建一個,並將循環的每個循環放入''中,並將循環中的每個單獨結果放入'​​'中。 – PHPglue

+0

我不想要一個表格,這些變量將用於個人資料頁面設置。該函數位於要調用變量的另一個文件(functions.php)中。 –

+0

你的函數getInfo($ u_id)不會返回任何東西,因爲你的'$ fname' /'$ lname'只在函數的範圍內,所以你不能訪問它們。將數據保存到數組,然後返回數組。然後你可以遍歷函數結果。 – Sean

回答

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>"; 
} 
1

當然,它不工作,因爲$fname$lname是該函數中的局部變量,當函數返回時,它們消失了。

將它們全部放入數組中,並將它們返回或放入$GLOBAL

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