2009-12-18 7 views
4

J'ai besoin de récupérer le postid (PK auto-incrémenté) d'une ligne quand je l'insère.Récupération des données de ligne de la ligne insérée (Mysql, PHP, mysqli)

J'utilise actuellement ce 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ù $ title est le nom du titre du poste nouvellement inséré.

Y at-il une partie de la classe mysqli qui me permettra de le faire en une seule requête ?? Est-ce que $ db -> query() retourne toute information qui rendra ceci plus simple et plus sûr?

J'ai essayé de parcourir la documentation de mysqli, mais je n'ai pas trouvé ce que je voulais. Je suis sûr qu'il est là quelque part.

titres multiples visserez ce, et bien qu'ils ne sont pas autorisés, vous ne pouvez pas être trop sûr

+0

vous ne réalisez votre requête est vulnérable à l'injection SQL parce que vous n'êtes pas échapper à titre de $, et il n'a pas d'importance que vous pensez sécurité $ titre est, ce n'est pas. – TravisO

+0

$ title a été échappé à l'avance car il a été utilisé dans la requête INSERT avant cela – Douglas

Répondre

11

Est-ce que votre table ont une colonne AUTO_INCREMENT? Si c'est le cas, vous pouvez utiliser mysql_insert_id() ou mysqli->insert_id pour obtenir cette valeur, puis l'utiliser pour sélectionner la ligne. More info here.

+0

ou vous pouvez écrire une requête pour obtenir l'id vous-même et ensuite le mettre dans les données insérées. –

+0

Arthur: C'est vrai, mais il y a toujours une chance qu'un autre client essaye de faire la même chose en même temps et vous finirez avec une collision. –

+0

Jordanie: Merci beaucoup, fonctionne parfaitement. J'avais vu cette méthode, mais j'ai compris comment ça fonctionnait. TY! – Douglas

3
+0

pourriez-vous s'il vous plaît fournir un extrait, je suis aux prises avec la façon d'utiliser mysqli-> insert_id pour sélectionner la ligne affectée.J'obtiens le résultat entier de mysqli-> insert_id mais je n'arrive pas à comprendre comment l'utiliser pour sélectionner les lignes affectées – iOSAndroidWindowsMobileAppsDev

+0

est-ce comment? $ last_id = $ conn-> insert_id; $ sql_last_id = "SELECT * FROM table WHERE $ conn-> insert_id = $ last_id LIMITE 1"; $ result = $ conn-> query ($ sql_last_id); if ($ result-> num_rows> 0) {// affiche les données de chaque ligne while ($ row = $ result-> fetch_assoc()) {echo "field1:". $ row ["field1"]. "- field2:". $ row ["field2"]. "". $ row ["field3"]. $ last_id. "
"; }} else {echo "Erreur:". $ sql_last_id. "
". $ conn-> error; } Ici, seule l'erreur est la mauvaise ligne est sortie – iOSAndroidWindowsMobileAppsDev

Questions connexes