我試圖創建我自己的註冊表單,但即時通訊與預處理語句有問題。準備INSERT語句以獲得insert_id在第二個準備INSERT語句中使用
的想法是創建一個準備好的語句插入信息到用戶表,然後從生成的內容在另一個INSERT語句
這裏使用的是一個版本我的註冊腳本獲取INSERT_ID
<?php
$returnedId = '';
include "includes/dbconnect.php";
$stmt = $db->prepare("INSERT INTO `users`(`Username`, `Email`, `Password`) VALUES (?, ?, ?)");
$stmt->bind_param('sss', $_POST['username'], $_POST['email'], $_POST['password']);
$stmt->execute();
$returnedId = $stmt->insert_id;
$stmt->close();
echo $returnedId;
$allergystmt = $db->prepare("INSERT INTO 'user_allergy' ('user_id', 'allergy_id') VALUES (?, ?)");
$allergystmt->bind_param('ss', $returnedId, $_POST['check_list']);
$allergystmt->execute();
$allergystmt->close();
header('Location: index.php');
?>
第一個準備好的語句正確運行並將信息插入表中,之後$ returnId變量被成功回顯。接下來的腳本是我第二個準備好的語句,當它試圖運行即時得到,說錯誤:
Fatal error: Call to a member function bind_param() on a non-object in D:\filepath\register.php on line 17
看來,我的心不是變量被帶入第二個準備好的聲明。
您在第二個查詢中使用'''而不是反引號('\'')。 –
您不需要將值作爲'$ returnedId'獲取和重用。您可以在第二個「INSERT」查詢中本地調用MySQL的'LAST_INSERT_ID()'。 –
@MichaelBerkowski:最好用PHP捕獲它。以防萬一以後有其他插入。 –