Dies ist die Fehlermeldung, die ich erhalte:
UPDATE QUESTION SET situacao='Concluido' WHERE id=? Syntaxfehler oder Zugriffsverletzung: 1064 Es liegt ein Fehler in Ihrer SQL-Syntax vor; überprüfen Sie, wo das ??“ Die richtige Syntax steht in Zeile 1
Ich habe viele Dinge ausprobiert und am Ende konnte ich nur den Code unten verwenden, vielen Dank euch allen
您已經(jīng)接近自己的答案了。正如 Slava Rozhnev 指出的那樣,盡管你的代碼對(duì) SQL 注入是開(kāi)放的。在您的問(wèn)題中,您在查詢中使用占位符。當(dāng)您準(zhǔn)備語(yǔ)句時(shí),您告訴 PDO:無(wú)論我放入其中的內(nèi)容,都不要執(zhí)行它,它只是數(shù)據(jù)
。準(zhǔn)備好后,您可以將值綁定到占位符。這可以通過(guò) bindValue 或 bindParam 或什至使用 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)
讀取當(dāng)前值并用它替換占位符。如果您要使用循環(huán),并且 $id
會(huì)不斷變化,您可以使用 $stmt-bindParam(1, $id)
這會(huì)讀取 $id 執(zhí)行查詢時(shí)的變量。另一種選擇是刪除 bindValue
調(diào)用并讓 execute
綁定值。這可以通過(guò)將值數(shù)組作為參數(shù)添加到 execute
調(diào)用來(lái)完成。在您的情況下,這將是 $stmt->execute([$id])
。我個(gè)人更喜歡執(zhí)行它,因?yàn)樗仍趫?zhí)行之前添加大量的 bindValue 調(diào)用要清晰得多。
另請(qǐng)注意,我已將 $sql
變量的賦值移至 try-catch 塊之外。這是因?yàn)槟朐?catch 中使用變量,如果 PDO 的構(gòu)造函數(shù)拋出 PDOException(在行 $link = new PDO("mysql:host=$servername;dbname= $dbname", $用戶名, $密碼);