L'obtention de données de ligne de la ligne insérée (Mysql, PHP, mysqli)
J'ai besoin de revenir à la postid (auto-incrémentation PK) d'une ligne lorsque je l'insère.
Je suis actuellement en utilisant pour l'obtenir
//get postid to return
if($result = $db -> query('SELECT postid FROM posts WHERE title = \''.$title.'\' LIMIT 1')){
$row = $result->fetch_assoc();
$json['postid'] = $row['postid'];
$result->free();
où $titre est le nom du titre de la nouvelle-post inséré.
Est là une partie de la classe mysqli qui va me permettre de faire cela en une seule requête?? N' $db -> query() retourne toutes les informations pour rendre plus simple et plus sûr?
J'ai essayé de regarder à travers les mysqli de la documentation, mais je ne pouvais pas trouver ce que je voulais. Je suis sûr qu'il est là quelque part.
Plusieurs titres de la vis de cela, et bien qu'ils ne sont pas autorisés, vous ne peux pas être trop sûr
Vous vous rendez compte que votre requête est vulnérable à une injection SQL parce que vous n'êtes pas échapper $titre, et il n'a pas d'importance comment fort vous pensez que $titre est, il ne l'est pas.
$title a été échappé à l'avance, car il a été utilisé dans la requête d'INSERTION avant cette
$title a été échappé à l'avance, car il a été utilisé dans la requête d'INSERTION avant cette
OriginalL'auteur Douglas | 2009-12-18
Vous devez vous connecter pour publier un commentaire.
Votre table une colonne de type AUTO_INCREMENT? Si oui, vous pouvez utiliser
mysql_insert_id()
oumysqli->insert_id
pour obtenir cette valeur, et ensuite l'utiliser pour sélectionner la ligne. Plus d'info ici.Arthur: C'est vrai, mais il y a toujours une chance qu'un autre client sera essaie de faire la même chose au même moment et vous vous retrouverez avec une collision.
Jordan: Merci beaucoup, fonctionne parfaitement. J'avais vu cette méthode, mais a fait comprendre de savoir comment a fonctionné. TY!
Jordanie: Si la requête est
SELECT LAST_INSERT_ID()
alors c'est sûr. La valeur est stockée/retournés par session.Jordan: je n'utilise pas mysql donc je ne suis pas sûr, mais j'espère que ça ne fonctionne pas comme ça. Postgresql série (numéroauto) garantit que chaque numéro est unique, peu importe quoi. Mais je ne sais pas à propos de mysql 🙂
OriginalL'auteur Jordan Running
insert_id
http://php.net/manual/en/mysqli.insert-id.php
est-ce de cette manière? $last_id = $conn->insert_id; $sql_last_id = "SELECT * from table where $conn->insert_id=$last_id LIMIT 1"; $result = $conn->query($sql_last_id); if ($result->num_rows > 0) { // sortie de données de chaque ligne while($row = $result->fetch_assoc()) { echo "champ1:" . $row["champ1"]. "- champ2: ". $row["champ2"]. "" . $row["field3"]. $last_id . "<br>"; } } else { echo "Erreur:" . $sql_last_id . "<br>" . $conn->erreur; } Ici que l'erreur est la mauvaise ligne est de sortie
OriginalL'auteur MindStalker