[英]PDO update database
嗨,我是PHP和PDO的新手。 我試圖根據我在會話文件中聲明的login_id變量更新數據庫中的記錄(我的會話運行正常)。
我有以下更新腳本代碼。 它在execute語句中引發錯誤。
/home/atlismap/public_html/bio.php:40中的“未捕獲的異常'PDOException',消息為'SQLSTATE [HY093]:無效的參數號:綁定變量的數量與令牌的數量不匹配”:40堆棧跟蹤:#0 / home / atlismap / public_html / bio.php(40):PDOStatement-> execute()#1 {main}“
有人知道為什么嗎?
require_once 'check.php';
$sql = "UPDATE users SET username = :username,
full_name = :full_name,
country = :country,
bio = :bio
WHERE id = : $log_user_id";
$stmt = $dtb->prepare($sql);
$stmt->bindParam(':full_name', $_POST['full_name'], PDO::PARAM_STR);
$stmt->bindParam(':country', $_POST['country'], PDO::PARAM_STR);
$stmt->bindParam(':bio', $_POST['bio'], PDO::PARAM_STR);
$stmt->execute();
您必須像其他參數一樣設置':username':
$stmt->bindParam(':username', $_POST['username'], PDO::PARAM_STR);
並修復:
$sql = "UPDATE users SET
…
WHERE id = : $log_user_id";
通過:
$sql = "UPDATE users SET
…
WHERE id = :id";
$stmt->bindParam(':id', $log_user_id, PDO::PARAM_INT);
PDO允許使用“:param_name”綁定參數,但是您為id使用變量,因此可以使用參數“:id”進行綁定,或者使用“ WHERE id = $ variable”。
我看到兩個問題。
您沒有將變量綁定到:username,並且存在WHERE id = : $log_user_id";
您應該刪除:並僅使用'$log_user_id'
(如果安全)或使用:log_user_id並將其綁定在下面。
做到這一點的另一種方法是將它們綁定到execute中,我發現它編寫起來簡單易行,代碼更少:
$sql = "UPDATE users SET username = ?,
full_name = ?,
country = ?,
bio = ?
WHERE id = ?";
$stmt = $dtb->prepare($sql);
$stmt->execute(array($_POST['username'], $_POST['full_name'], $_POST['country'], $_POST['bio'], $log_user_id));
只需按照將?放入查詢的順序將它們綁定
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.