2009-04-23 9 views
6

tengo este código:válido MySQL resultado de recursos

$rows = array(); 
$res = mysql_query($someQuery); 

if(!mysql_errno()) 
    while($row = mysql_fetch_assoc($res)) 
     $rows[] = $row; 

$someQuery es una consulta arbitraria que escribo en una forma. El mysql_errno capta el caso cuando escribo una consulta mysql con errores en ella. Pero, descubrí que cuando hago una consulta "Eliminar de table_name", por supuesto no es un error, pero al mismo tiempo, el mysql_fetch_assoc falla con un "Advertencia: mysql_num_rows(): el argumento proporcionado no es un resultado válido de MySQL recurso en /blah/blah/file.php en línea x ".

He intentado buscarlo en el manual (tal vez estoy solo a ciegas ...) pero ¿hay alguna función que pueda usar para verificar si $ res es un recurso de resultado MySQL válido o no?

+0

posible duplicado de [Advertencia: mysql_fetch_ * espera que el parámetro 1 sea resource, boolean given error] (http://stackoverflow.com/questions/11674312/warning-mysql-fetch-expects-parameter-1-to-be -resource-boolean-given-error) – j0k

Respuesta

7

if ($res) debería funcionar bien para comprobar si se trata de un recurso. is_resource() determinará si es un recurso válido en absoluto.

También puede comprobar mysql_affected_rows para tratar de determinar si se trata de un INSERT/UPDATE/etc

0

Si INSERT, UPDATE, DELETE o DROP a través de mysql_query, solo devolverá true o false (dependiendo del éxito de la operación).

¿No estoy seguro de lo que espera que contenga el recurso en esta instancia?

Si necesita el número de filas afectadas, puede usar mysql_affected_rows().

2

mysql_query() vuelve true o false para que pueda comprobar de esta manera:

if($res) { 
    // The query succeeded. 
} 
+8

Si bien esto es cierto para el caso de la pregunta descrita, es un poco erróneo. mysql_query() devuelve verdadero o falso si la consulta alteró la base de datos de alguna manera (BORRAR, INSERTAR, DEJAR, etc.). Pero si la consulta es SELECCIONAR, MOSTRAR, DESCRIBIR o EXPLICAR, devuelve un recurso. –

0

Tal vez simplemente cambiar la condición a:

if(!mysql_errno() && @mysql_num_rows($res) > 0) 

El condicional fallará si no hay filas, y @ será s presione la advertencia.

3

Junto con is_resource() puede usar get_resource_type() para comprobar si se trata de un recurso MySQL.

$res_type = is_resource($res) ? get_resource_type($res) : gettype($res); 

if(strpos($res_type, 'mysql') === false) { 
    echo 'Invalid resource type: ' . $res_type; 
} 

get_resource_type() puede volver "mysql link" o "mysql link persistent" dependiendo del tipo de conexión.

+1

Si google trae a alguien aquí, la técnica de supresión de advertencia anterior no funciona para el tipo de recurso '" enlace odbc "'. –

Cuestiones relacionadas