簡體   English   中英

MySQL表未更新(PDO)

[英]MySQL Tables Not Updating (PDO)

我正在嘗試讓PHP代碼更新用戶表中的地址。

對於初學者來說,使用mysqli並嘗試了預備語句和更簡單的查詢。 從來沒有對預備語句感到好運,因為我發現它們令人困惑,尤其是bind_result()。

我確實在命令本身上使用mysql測試,以確保它可以正常工作。 根據需要進行更新,因此它不是mysql命令本身。 我什至在服務器本地的phpMyAdmin中給了它一個鏡頭。 但是,一旦使用PHP,它就不會更新表中的數據。

立即想到的是確保訪問mysql表的“用戶”具有UPDATE權限,並且確實如此。 因此,它看起來不像是權限問題。 即使我以所有權利和特權使用mysql根目錄,表也不會更新。

我最初的嘗試很簡單:

$query = "UPDATE `UserTable` SET `Address`=\"". $address . "\" WHERE `id`=".$id;

$conn->query($query);

因此,我嘗試了此的預准備語句版本,並且具有相同的效果。 沒有錯誤,但我的表沒有任何變化。

今天,我決定走PDO路線。

try {

$dbh = new PDO("mysql:host=$hostname; dbname=DBDatabase", $db_user, $db_pass);                      
$query = "UPDATE UserTable SET 'Address'='".$address."' WHERE 'id'=".$id;
echo "Query: ". $query;
$count = $dbh->exec($query);
echo $count . " record changed.";
$dbh = null;
}

catch (PDOException $e) {
    echo $e->getMessage();
}

我還嘗試過更改其他字段(也許只是發生在諸如地址之類的VARCHAR字段中)。 因此,我嘗試翻轉Registered標志,並且沒有任何更改可注冊。

您沒有正確使用PDO。 這就是您要形成查詢的方式。

try {

$dbh = new PDO('mysql:host=$hostname; dbname=DBDatabase', $db_user, $db_pass);                      
$stmt = $dbh->prepare('UPDATE UserTable SET `Address`=:address WHERE `id`=:id');
$stmt->bindParam(':address', $address, PDO::PARAM_STR);
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
$stmt->execute();

}

catch (PDOException $e) {
    echo $e->getMessage();
}

這不是您的直接問題,但是准備好的陳述非常容易,它們只需要學習曲線-坦白地說,從個人經驗來看,這比學習PDO更為艱巨。

傳統查詢步驟:

  1. 數據庫查詢。
  2. 數據庫結果。

准備的查詢:

  1. 發送沒有參數的數據庫查詢,以進行准備。
  2. 插入參數。
  3. 連接到結果(按順序為每個返回列綁定一個變量)。
  4. 使用變量而不是$result數組遍歷結果。

這是一些額外的步驟,但是需要花二十分鍾來概念化它,所有這些都將結合在一起。 PDO的優點是它可以跨不同的數據庫工作,並且非常適合准備的語句。

暫無
暫無

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

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