Heim  >  Fragen und Antworten  >  Hauptteil

PHP-Abfrageaktualisierungsdaten

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粉938936304P粉938936304186 Tage vor408

Antworte allen(1)Ich werde antworten

  • P粉132730839

    P粉1327308392024-04-02 12:07:59

    您已经接近自己的答案了。正如 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) 这会读取 < code>$id 执行查询时的变量。另一种选择是删除 bindValue 调用并让 execute 绑定值。这可以通过将值数组作为参数添加到 execute 调用来完成。在您的情况下,这将是 $stmt->execute([$id])。我个人更喜欢执行它,因为它比在执行之前添加大量的 bindValue 调用要清晰得多。

    另请注意,我已将 $sql 变量的赋值移至 try-catch 块之外。这是因为您想在 catch 中使用变量,如果 PDO 的构造函数抛出 PDOException(在行 $link = new PDO("mysql:host=$servername;dbname= $dbname", $用户名, $密码);

    Antwort
    0
  • StornierenAntwort