簡體   English   中英

PDO更新數據庫

[英]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.

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