2009-09-28 9 views
7

Existe-t-il un retour de MySQL/PHP sur une requête INSERT en cours d'exécution? Voici ma fonction que j'ai dans une classe.Valeur de retour de PHP MySQL INSERT avec une exécution de requête

function mysqlQuery($query) { 
    // Gets the results from the query 
    $results = mysql_query($query, $this->connection); 

    // Loops through the queried results as an multi-dimensional array 
    while($rows = mysql_fetch_array($results, MYSQL_ASSOC)) { 
     // Push results to single array 
     $rs[] = $rows; 
    } 

    // Return results as array 
    return $rs; 
} 

Voilà comment j'appelle la fonction

$rs = $dbh->mysqlQuery($query); 

Mais l'exécution d'une requête INSERT rs $ retourne rien. Est-ce que ma fonction a besoin d'aide ou est-ce le comportement par défaut? Tous les conseils seraient utiles aussi bien. DUH, merci de me rappeler que cela renvoie TRUE/FALSE. pour une raison quelconque, je l'ai eu dans ma tête, il a effectivement retourné une autre valeur, mais après avoir regardé ma fonction, je vois que je ne vérifie pas la condition TRUE/FALSE et seulement en boucle dans le tableau des résultats.

Merci pour toutes les bonnes réponses, mais d'abord pour répondre correctement obtenu les points, bravo!

Répondre

25

INSERT renvoie simplement vrai ou faux. Pour retourner quelque chose d'utile, vous aurez besoin d'une requête SELECT ou similaire. il n'y a aucun résultat à extraire avec INSERT.

+0

premier à répondre, thnx –

5

De la documentation php:

Valeurs de retour Pour SELECT, SHOW, DESCRIBE, EXPLAIN et d'autres déclarations qui reviennent resultset, mysql_query() retourne une ressource en cas de succès, ou FALSE en cas d'erreur.

Pour les autres types d'instructions SQL, INSERT, UPDATE, DELETE, DROP, etc, mysql_query() retours TRUE sur la réussite ou FALSE en cas d'erreur.

La ressource de résultat renvoyée doit être transmise à mysql_fetch_array() et à d'autres fonctions pour traiter les tables de résultats afin d'accéder aux données renvoyées.

Utilisez mysql_num_rows() pour savoir combien de lignes ont été retournées pour une SELECT statement ou mysql_affected_rows() pour savoir combien de lignes ont été affectées par un DELETE, INSERT, REPLACE ou UPDATE statement.

mysql_query() va également échouer et retourner FALSE si le l'utilisateur n'a pas l'autorisation d'accéder aux tables référencées par la requête.

0

De php.net http://us2.php.net/mysql_query

Pour SELECT, SHOW, DESCRIBE, EXPLAIN et d'autres déclarations de retour resultset, mysql_query() retourne une ressource en cas de succès, ou si une erreur survient .

Pour les autres types d'instructions SQL, INSERT, UPDATE, DELETE, DROP, etc, mysql_query() retourne TRUE en cas de succès ou FALSE en cas d'erreur.

0

Généralement, lorsque les développeurs construisent des fonctions de base pour manipuler des requêtes, ils utilisent deux méthodes.Un, "query", utilisé pour SELECTs et co, et un, "exec", d'autres INSERT, UPDATEs et d'autres (comme dans l'extension PDO).

Si vous voulez garder votre fonction, ajoutez une instruction IF autour de la boucle de vérification du type de résultats $ (avec un is_resource() par exemple)

0

Dans l'exemple ci-dessous, j'ajouter à ma clause d'insertion de la "return" avec la clé primaire de ma table, puis après l'exécution, je fais un aller chercher un tableau avec la valeur du dernier identifiant inséré.

<?php 
    public function insert($employee){ 

     $sqlQuery = "INSERT INTO employee(user_id,name,address,city) VALUES(:user_id,:name,:address,:city) RETURNING employee_id"; 

     $statement = $this->prepare($sqlQuery); 

     $a ="2002-03-11 12:01AM" ; 

     $statement->bindParam(":user_id", $employee->getUserId(), PDO::PARAM_INT); 
     $statement->bindParam(":name", $employee->getName(), PDO::PARAM_STR); 
     $statement->bindParam(":address", $employee->getAddress(), PDO::PARAM_STR); 
     $statement->bindParam(":city", $employee->getCity(), PDO::PARAM_STR); 
     $statement->execute(); 

     $result = $statement->fetch(PDO::FETCH_ASSOC); 
     return $result["employee_id"]; 

    } 
?> 

Source

Questions connexes