PHP-Abfrageaktualisierungsdaten
P粉938936304
P粉938936304 2024-04-01 13:41:23
0
1
507

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

P粉938936304
P粉938936304

Antworte allen(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", $用户名, $密码);

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage