[英]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”
我似乎無法弄清楚我在使用/做錯什么。
提前感謝你的幫助。
獲得結果后,您必須移至過程返回的其他結果,才能運行其他查詢。
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.