簡體   English   中英

PHP和Mysqli與存儲過程

[英]PHP and Mysqli with Stored Procedure

我有以下功能,我希望它從MySQL數據庫檢索匹配的記錄:

public function GetUserData($conn){
        $username = $_SESSION['username'];
        $stmt = $conn->prepare("CALL GetUserData(?)") or die("Query fail: " . mysqli_error($conn));
        $stmt->bind_param("s",$username);
        $stmt->execute() or die("Query fail: " . mysqli_error($conn));
        while($row = $stmt->fetch()){
            print_r($row);
        }
        exit;
    }

GetUserData是一個存儲過程,如下所示:

CREATE DEFINER=`root`@`localhost` PROCEDURE `GetUserData`(IN `StoredUsername` VARCHAR(255))
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
select firstname from users where username=StoredUsername;
END

我的問題是, print_r($row)僅打印“ 1”,如果匹配的行是兩個,則打印“ 11”

我似乎無法弄清楚我在使用/做錯什么。

提前感謝你的幫助。

  • mysqli_stmt_fetch()並沒有您的想法
  • 用戶名應通過參數傳遞
  • 而連接應該是一個類變量
  • 獲得結果后,您必須移至過程返回的其他結果,才能運行其他查詢。

     public function GetUserData($username){ $stmt = $this->conn->prepare("CALL GetUserData(?)"); $stmt->bind_param("s",$username); $stmt->execute(); $data = $stmt->get_result()->fetch_all(); $this->conn->next_result(); return $data; } 

另外,與其手動檢查每個數據庫命令的結果,不如告訴mysqli自動拋出錯誤。 在mysqli_connect之前添加以下行,並忘記所有這些丑陋or die永遠or die

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM