PHP查詢更新數據
P粉938936304
P粉938936304 2024-04-01 13:41:23
0
1
464

這是我收到的錯誤:

更新問題SET situacao='Concluido' WHERE id=? SQLSTATE[42000]: 語法錯誤或存取衝突: 1064 您的SQL 語法有錯誤;檢查與您的MariaDB 伺服器版本相對應的手冊,了解在「? 「附近使用的正確語法在第1 行

我嘗試了很多東西,最後只能使用下面的程式碼,感謝大家

P粉938936304
P粉938936304

全部回覆(1)
P粉132730839

您已經接近自己的答案了。正如 Slava Rozhnev 指出的那樣,儘管你的程式碼對 SQL 注入是開放的。在您的問題中,您在查詢中使用佔位符。當您準備語句時,您告訴 PDO:無論我放入其中的內容,都不要執行它,它只是資料。準備好後,您可以將值綁定到佔位符。這可以透過 bindValuebindParam 或甚至使用 execute()

#
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $stmt = $link->prepare($sql);
    $stmt->bindValue(1, $id);

    $stmt->execute();

    header("Location:verTodos.php");
} catch (PDOException $e) {

    echo $sql . "
" . $e->getMessage(); } $link = null; ?>

$stmt->bindValue(1, $id)讀取目前值並用它取代佔位符。如果您要使用循環,並且$id 會不斷變化,您可以使用$stmt-bindParam(1, $id) 這會讀取$id執行查詢時的變數。另一個選擇是刪除 bindValue 呼叫並讓 execute 綁定值。這可以透過將值數組作為參數新增至 execute 呼叫來完成。在您的情況下,這將是 $stmt->execute([$id])。我個人更喜歡執行它,因為它比在執行之前添加大量的 bindValue 呼叫要清晰得多。

另請注意,我已將 $sql 變數的賦值移至 try-catch 區塊之外。這是因為您想要在catch 中使用變量,如果PDO 的建構子拋出PDOException(在行$link = new PDO("mysql:host=$servername;dbname= $dbname", $用戶名, $密碼);

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板