consultas múltiples de mysqli: la variable set produce un error booleano / ¿cómo omitir esto?

StackOverflow https://stackoverflow.com/questions/1227022

  •  22-07-2019
  •  | 
  •  

Pregunta

Obtuve la siguiente consulta simple que funciona bien a través de phpmyadmin pero cuando la agrego a mi sitio web de php no se devuelven resultados y tampoco hay mensajes de error / advertencia. Si elimino " SET @ N = -1; " entonces funciona bien.

<?php 
$db_connect = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD, true);
mysql_select_db(DB_NAME, $db_connect);

$test_query = mysql_query("SET @N=-1;SELECT `id`, (@N:=@N+1) AS `mycount` FROM `mydb`;");

for ($i = 0; $i <= mysql_num_rows($test_query)-1; $i++) {
   echo mysql_result($db_directorymap, $i, 0) . " " . mysql_result($db_directorymap, $i, 1) . "<br />";
}
?>

ACTUALIZACIÓN: Me acabo de mudar a mysqli pero, por supuesto, todavía tengo problemas con la declaración mysql y mysqli_multi_query. Parece que cuando ejecuta la primera parte de la consulta, los resultados devueltos están vacíos, por lo que se produce un error booleano. Supongo que tengo que omitir el primer conjunto de resultados, pero no sé cómo hacerlo.

¿Fue útil?

Solución

Es porque la función mysql_query solo aceptará una consulta, pero le ha dado dos, separadas por un punto y coma. Pruebe cualquiera:

  1. Ejecutar cada consulta por separado (no sé si esto funcionará):

    mysql_query( "SET @N=-1" );
    mysql_query( "SELECT `id`, (@N:=@N+1) AS `mycount` FROM `mydb`" );
    
  2. Uso de mysqli con el función multi_query (o una PDO equivalente si hay uno).

Para responder a su pregunta actualizada: consulte la página del manual de PHP para multi_query. Creo que querrás usar mysqli :: next_result . Algo así, usando un estilo de procedimiento:

mysqli_multi_query($link, $query);
mysqli_next_result($link);

if ($result = mysqli_store_result($link)) {
    while ($row = mysqli_fetch_row($result)) {
        printf("%s\n", $row[0]);
    }
    mysqli_free_result($result);
}

Otros consejos

No se admiten múltiples consultas a través de mysql_query, por lo que supongo que solo se está ejecutando el comando SET y no el comando SELECT posterior.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top