Pergunta

Got a seguinte consulta simples que funciona bem através do phpMyAdmin, mas quando eu adicioná-lo para o meu site php nenhum resultado for retornado e nenhum erro / mensagens de aviso também. Se eu remover "JOGO @ N = -1;" em seguida, ele funciona bem.

<?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 />";
}
?>

UPDATE: Acabei de me mudar para mysqli, mas é claro que eu ainda estou tendo um problema com a declaração mysql e mysqli_multi_query. Parece que quando ele é executado a primeira parte da consulta os resultados retornados estão vazias, assim, um erro de boolean é dado. Eu estou supondo que eu tenho que pular o primeiro conjunto de resultados, mas eu não sei como fazer isso?

Foi útil?

Solução

É porque a função mysql_query só aceitará uma consulta, mas você deu-lhe dois, separados por um ponto e vírgula. Tente qualquer um:

  1. A execução de cada consulta separadamente (não sei se isso vai funcionar):

    mysql_query( "SET @N=-1" );
    mysql_query( "SELECT `id`, (@N:=@N+1) AS `mycount` FROM `mydb`" );
    
  2. Usando mysqli com o multi_query (ou um DOP equivalente, se houver).

Para responder à sua pergunta atualização: verifique a página de manual do PHP para multi_query. Eu acho que você vai querer usar mysqli::next_result. Algo parecido com isto, usando o estilo de procedimento:

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

Outras dicas

Várias consultas via mysql_query não são suportados, então eu acho que isso é só executar o comando SET, e não o comando SELECT subseqüente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top