2009-09-28 10 views
7

¿Hay algo devuelto por MySQL/PHP en una consulta INSERT que se está ejecutando? Aquí está mi función que tengo en una CLASE.PHP MySQL INSERT valor de retorno con una ejecución de consulta

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; 
} 

Esta es la forma en que llamo la función

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

Pero la ejecución de una consulta INSERT los $ rs no devuelve nada. ¿Mi función necesita ayuda o es este el comportamiento predeterminado? Cualquier consejo sería útil también.

DUH, gracias por recordarme que devuelve VERDADERO/FALSO. por alguna razón lo tuve en mi cabeza, en realidad devolvió otro valor, pero después de mirar mi función veo que no estoy verificando la condición VERDADERO/FALSO y solo recorro la matriz de resultados.

Gracias por todas las respuestas correctas, pero primero en responder correctamente obtuve los puntos, ¡aplausos!

Respuesta

25

INSERT simplemente devuelve verdadero o falso. para devolver realmente algo útil, necesitará una consulta SELECCIONADA o similar. no hay resultados para buscar con INSERTAR.

+0

primero en responder, thnx –

5

De la documentación de PHP: Valores

Volver Para SELECT, SHOW, describir, explicar y otras declaraciones que regresan de resultados mysql_query(), devuelve un recurso en caso de éxito, o FALSE en caso de error.

Para otro tipo de sentencias SQL, INSERT, UPDATE, DELETE, DROP, etc, mysql_query() vuelve TRUE el éxito o FALSE en caso de error.

El recurso de resultado devuelto se debe pasar a mysql_fetch_array(), y otras funciones para tratar con las tablas de resultados, para acceder a los datos devueltos.

Uso mysql_num_rows() para averiguar cuántas filas fueron devueltas por un SELECT statement o mysql_affected_rows() para averiguar cuántas filas se vieron afectados por un DELETE, INSERT, REPLACE o UPDATE statement.

mysql_query() también fallará y devolverá FALSE si el el usuario no tiene permiso para acceder a la (s) tabla (s) a las que hace referencia la consulta.

0

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

Por SELECT, SHOW, describir, explicar y otras declaraciones de regresar de resultados, mysql_query() devuelve un recurso en caso de éxito, o FALSE en caso de error .

Para otro tipo de sentencias SQL, INSERT, UPDATE, DELETE, DROP, etc, mysql_query() devuelve TRUE en caso de éxito o FALSE en caso de error.

0

Generalmente, cuando los desarrolladores construyen funciones de inicio para manipular consultas, utilizan dos métodos.Uno, "consulta", usado para SELECT y co, y uno, "exec", otros INSERT, UPDATE y otros (como en la extensión PDO).

Si desea mantener su función, agregar una instrucción IF alrededor del bucle de comprobar el tipo de $ resultados (con un is_resource() por ejemplo)

0

En el siguiente ejemplo, añado a mi cláusula de inserción del "regresar" junto con la clave principal de mi tabla, luego de la ejecución, hago una búsqueda para obtener una matriz con el valor de la última identificación insertada.

<?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

Cuestiones relacionadas