Page 1 sur 1

Test retour d'un insert

Posté : 02 janv. 2008, 13:46
par saebakun
Bonjour,

ça doit classique mais je ne trouve pas ce que je veux :/

Je voudrais faire un test sur un insert pour savoir s'il est réussi ou pas en fait.

Code : Tout sélectionner

if(query($sql)){ echo "ok" }else{ echo "pas ok"; }
Mais je n'ai pas le bon truc et de plus si ma requête ne fonctionne pas j'ai un retour à l'écran 'un message "FATAL ERROR.........." de mysql :/

Merci

Posté : 02 janv. 2008, 14:02
par d0m
regarde la doc de la fonction mysql_query.
Elle renvoie true si c'est bon, false sinon.

Posté : 02 janv. 2008, 14:08
par saebakun
Ouais mais j'utilise PDO donc pas de mysql_query en fait :/

j'ai un

Code : Tout sélectionner

$resultats=$connexion->query($query); $data=$resultats->fetchAll(PDO::FETCH_ASSOC);

Posté : 02 janv. 2008, 14:14
par sadeq
si tu écris :
if (mysql_query($sql))

celà permet de savoir effectivement que la requête est correcte et exécutée mais ne veut pas dire que
l'objectif attendu de la requette est atteint.
Dans ce sens, pour savoir si un insert a bel et bien inséré des lignes, Il faut utiliser la fonction suivante:
if (mysql_affected_rows($connexion) >0)

En effet, si cette fonction retrourne 0 c'est que la requête INSERT/UPDATE ou DELETE n'a rien fait.

Pour la requête SELECT, on utilise mysql_num_rows($resultat) pour compter le nombre d'enregistrements sélectionnés.

Posté : 02 janv. 2008, 14:26
par saebakun
Ouais mais je ne fais plus de mysql_query ou autre avec PDO du coup j'ai trouvé ça:

Code : Tout sélectionner

function sql($query){ $resultats=$connexion->query($query); if($resultats===FALSE){ $data=false; }else{ $data=$resultats->fetchAll(PDO::FETCH_ASSOC); $resultats->closeCursor(); return $data; $connexion = NULL; } }
Puis dans mes tests dans le code php du site je test $data:

Code : Tout sélectionner

if($data==false){ echo "pas ok"; }else{ echo "ok"; }
Et c'est niquel :)

Merci pour les pistes ;)[/quote]

Posté : 02 janv. 2008, 14:39
par sadeq
Ô, excuse moi j'ai pas vu que tu utilise PDO. L'environement PDO permet de mettre en oeuvre des transactions pour emettre des requêtes.
Une transaction est un espace temporaire de dialogue client/serveur où une suite de requêtes peut être exécutée et testée. Dans le cas d'erreur on peut faire un ROLLBACK(annulation) sinon si tout va bien un COMMIT (validation)

Exemple:
<?php
try {
	//Se connecter par PDO
    $connexion = new PDO('mysql:host=localhost;dbname=test', 'root', '');
    $connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	
    //Commencer une transaction
    $connexion->beginTransaction();

    //Requête
    $connexion->exec("insert into client values (3, 'Momo')");
    $connexion->exec("insert into client values (4, 'Lolo')");

    //Valider les requête et arrêter la transaction
    $connexion->commit();
    echo "Requêtes exécutées avec succès";

} catch (PDOException $e) {  //Gestion des erreurs causées par les requêtes PDO
    //Annuler la transaction
    if ($connexion) $connexion->rollBack();
    //Afficher l'erreur
    echo "Échec : " . $e->getMessage();
}

?>
L'instruction php TRY { } CATCH () {} permet de capturer les erreurs et de les gérer d'une façon centralisée.
Quand on reste dans le try {} c'est qu'il n'y a pas d'erreur.

Posté : 02 janv. 2008, 15:11
par Truc
Ô, excuse moi j'ai pas vu que tu utilise PDO.
Il ne l'avait pas précisé dès le départ non plus... :wink:

Donc perte de temps et d'argent pour lui et sa boite... saebakun t'es viré ! :twisted:
(Et bonne année ;) )