Données de mise à jour des requêtes PHP
P粉938936304
P粉938936304 2024-04-01 13:41:23
0
1
387

Voici l'erreur que je reçois :

UPDATE QUESTION SET situacao='Concluido' WHERE id=? SQLSTATE[42000] : Erreur de syntaxe ou violation d'accès : 1064 Il y a une erreur dans votre syntaxe SQL ; consultez le manuel de la version de votre serveur MariaDB pour voir où se trouve le "?" la syntaxe correcte à utiliser est à la ligne 1

J'ai essayé beaucoup de choses et au final je n'ai pu utiliser que le code ci-dessous, merci à tous

P粉938936304
P粉938936304

répondre à tous(1)
P粉132730839

Vous êtes proche de votre réponse. Comme Slava Rozhnev l'a souligné, votre code est cependant ouvert à l'injection SQL. Dans votre question, vous utilisez des espaces réservés dans votre requête. Lorsque vous préparez un relevé, vous dites à PDO : 无论我放入其中的内容,都不要执行它,它只是数据. Lorsque vous êtes prêt, vous pouvez lier la valeur à l'espace réservé. Cela peut être fait via bindValue ou bindParam ou même en utilisant 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; ?>

OK$stmt->bindValue(1, $id)读取当前值并用它替换占位符。如果您要使用循环,并且 $id 会不断变化,您可以使用 $stmt-bindParam(1, $id) 这会读取 $id 执行查询时的变量。另一种选择是删除 bindValue 调用并让 execute 绑定值。这可以通过将值数组作为参数添加到 execute 调用来完成。在您的情况下,这将是 $stmt->execute([$id]). Personnellement, je préfère le faire car c'est beaucoup plus propre que d'ajouter un tas d'appels bindValue avant de le faire.

Notez également que j'ai $sql 变量的赋值移至 try-catch 块之外。这是因为您想在 catch 中使用变量,如果 PDO 的构造函数抛出 PDOException(在行 $link = new PDO("mysql:host=$servername;dbname= $dbname", $用户名, $密码);

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!