PHP de mise à JOUR de l'instruction préparée
Salut, je suis en train d'apprendre la bonne façon d'utiliser des déclarations préparées à l'avance pour éviter les injections SQL etc.
Lorsque j'exécute le script, je reçois un message de mon script dire 0 Lignes Insérées, je m'attends à-dire 1 les Lignes Insérées et des cours de mise à jour de la table. Je ne suis pas entièrement sûr sur ma déclaration préparée à l'avance, comme je l'ai fait quelques recherches et je veux dire qu'il varie d'un exemple à l'autre.
Quand je suis à jour ma table, j'ai besoin de déclarer tous les champs ou est-ce ok pour mettre à jour un champ??
Toute information serait très utile.
index.php
<div id="status"></div>
<div id="maincontent">
<?php //get data from database.
require("classes/class.Scripts.inc");
$insert = new Scripts();
$insert->read();
$insert->update();?>
<form action="index2.php" enctype="multipart/form-data" method="post" name="update" id="update">
<textarea name="content" id="content" class="detail" spellcheck="true" placeholder="Insert article here"></textarea>
<input type="submit" id="update" name="update" value="update" />
</div>
classes/classe.Les Scripts.inc
public function update() {
if (isset($_POST['update'])) {
$stmt = $this->mysqli->prepare("UPDATE datadump SET content=? WHERE id=?");
$id = 1;
/* Bind our params */
$stmt->bind_param('is', $id, $content);
/* Set our params */
$content = isset($_POST['content']) ? $this->mysqli->real_escape_string($_POST['content']) : '';
/* Execute the prepared Statement */
$stmt->execute();
printf("%d Row inserted.\n", $stmt->affected_rows);
}
}
Avez-vous l'essayer pour voir ce qui se passe?
real_escape_string() n'est pas nécessaire pour les instructions préparées
Dans votre SQL, le premier paramètre est le contenu et la deuxième est l'ID. Lorsque vous appelez bind_param, vous avez inversé l'ordre - essayez d'échanger l'ordre autour de dans bind_param
J'ai essayé et cela n'a pas d'effet de la table
votre droit! merci pour cette!
real_escape_string() n'est pas nécessaire pour les instructions préparées
Dans votre SQL, le premier paramètre est le contenu et la deuxième est l'ID. Lorsque vous appelez bind_param, vous avez inversé l'ordre - essayez d'échanger l'ordre autour de dans bind_param
J'ai essayé et cela n'a pas d'effet de la table
votre droit! merci pour cette!
OriginalL'auteur 001221 | 2013-08-19
Vous devez vous connecter pour publier un commentaire.
Re à vos questions:
C'est parce que vous avez inversé l'ordre des paramètres lorsque vous lie. Si vous êtes à la recherche de la colonne id de la valeur numérique de dollars de votre contenu, ce qui est probablement interprété comme 0. Si la mise à JOUR de la clause where correspond à zéro lignes.
Il est bon de définir une seule colonne dans une instruction de mise à JOUR. Les autres colonnes ne seront pas modifiées.
une lettre pour chaque paramètre. 's' pour le string, 'i' pour entier, etc. Lire php.net/manual/en/mysqli-stmt.bind-param.php
@BillKarwin
Pour moi$status variable
montreinteger
valeur . J'ai utiliséecho $status
et la sortie est1
.lorsque vous l'écho d'une
true
valeur, PHP imprime1
.OriginalL'auteur Bill Karwin
En fait, les requêtes préparées ne sont pas si complexes que tout le monde pense. Au contraire, une déclaration préparée à base de code est le plus simple et ordonnée, de façon à exécuter une requête. Prenez, par exemple, votre code.
Comme vous pouvez le voir, le code pourrait être très simple et concise, si utilisé correctement!
Vous avez besoin fondamentalement, seulement trois lignes:
Aussi simple que 1-2-3!
Remarque qu'au lieu de vérifier chaque fonction du résultat manuellement, vous pouvez définir le mode de création de rapports pour mysqli une fois pour toutes. Pour ce faire, ajoutez la ligne suivante avant
mysqli_connect()
/new mysqli
:le résultat sera à peu près la même chose qu'avec les trigger_error mais sans une seule ligne supplémentaire de code!
OriginalL'auteur Your Common Sense