2010-12-15 43 views
1

Dans le but d'améliorer la sécurité de mes scripts, j'ai commencé à utiliser des instructions préparées pour empêcher l'injection mysql. Ce script insère très bien les données, mais l'obtention du dernier identifiant inséré (basé sur l'incrémentation automatique dans la base de données) renvoie maintenant 0 quand il devrait retourner le bon numéro d'identification.Instructions préparées et comment elles affectent les requêtes

Cette partie est très bien insérée.

$stmt = $conn->prepare("INSERT INTO users (userName) VALUES (?)"); 
$stmt->bind_param("s", $_SESSION['username']); 
$stmt->execute(); 

C'est là que j'ai des problèmes. Je suis en train d'obtenir le dernier ID Inséré de l'utilisateur et retourne 0.

// Get the last inserted ID for the users ID 
$query = "SELECT LAST_INSERT_ID()"; 
$result = mysql_query($query); 
if ($result) { 
    $nrows = mysql_num_rows($result); 
    $row = mysql_fetch_row($result); 
    $userId = $row[0]; 
} 

Ce travaillait quand j'avais mon script avant de commencer sur les déclarations préparées. La seule chose que j'ai changé ajoutait la déclaration préparée pour insérer les données et ma connexion db est la suivante:

$conn = new mysqli($server, $user, $password, $database) or die('Could not connect: ' . mysql_error()); 

Je suis un noob avec php de sorte que toute aide serait grandement appréciée.

Répondre

4

Vous pouvez avoir un malentendu fondamental: Lorsque vous passez à mysqli, vos fonctions mysql_* n'utiliseront plus la même connexion.

LAST_INSERT_ID() fonctionne par connexion.

Vous devrez faire cette requête en utilisant la même bibliothèque/connexion que la requête principale, ou comme le souligne @zerkms, utilisez $conn->insert_id.

+1

Cette réponse sera complétée avec cette ligne '$ conn-> insert_id' – zerkms

+0

@zerkms Nice! Ajouté, merci. –

+0

Il ne sert à rien d'utiliser une requête pour récupérer le dernier identifiant d'insertion lorsque vous avez des fonctions API à faire de même. – vanneto

1
+0

Merci. J'ai cherché autour mais j'ai échoué. Savez-vous si mysqli_insert_id() renvoie la dernière ligne insérée dans la base de données dans son ensemble, ou est-ce par session? Dans le cas où plusieurs utilisateurs insèrent, je voudrais récupérer le dernier identifiant inséré de l'utilisateur qui a fait l'insertion. – Jason

+0

@Jason, c'est la dernière requête pour l'objet 'mysqli'. –