2011-12-21 2 views
3
<?php 

$mysqli=mysqli_connect("localhost","root","","politicalforum"); 

$query="SELECT query_title FROM administrator"; 
    $query.="SELECT thread_id FROM threads"; 

if($mysqli->multi_query($query)) 
{ 
    do 
    { 

     if($result=$mysqli->store_result()) 
     { 
      while($row=$result->fetch_row()) 
      { 
       printf("%s\n",$row[0]); 
      } 
      $result->free(); 
     } 

     if($mysqli->more_results()) 
     { 
      print("-------------------------------"); 
     } 
    }while($mysql->next_result()); 
} 


$mysqli->close(); 

?>MySQLi и не multi_query работает

Он не работает .. оно не перейти к первому, если условие, которое определяет, если это multiquery .. У меня есть другой вопрос, ..why являются multi_query() полезно ..,

UPDATE:

Строгие стандарты: MySQLi :: next_result() [mysqli.next-результат]: Там находится нет следующего набора результатов. Пожалуйста, звоните mysqli_more_results()/Mysqli :: more_results(), чтобы проверить, можно ли назвать эту функцию/метод в C: \ XAMPP \ HTDOCS \ PoliticalForum2 \ test.php на линии 42

РЕШИТЬ:

<?php 

$mysqli=mysqli_connect("localhost","root","","politicalforum"); 

$query="SELECT query_title FROM administrator;"; 
    $query.="SELECT thread_id FROM threads;"; 

if($mysqli->multi_query($query)) 
{ 
    do 
    { 

     if($result=$mysqli->store_result()) 
     { 
      while($row=$result->fetch_row()) 
      { 
       printf("%s<br/>",$row[0]); 
      } 
      $result->free(); 
     } 

     if($mysqli->more_results()) 
     { 
      print("-------------------------------<br/>"); 
     } 
     else 
     { 
      echo '<br/>'; 
     } 
    }while($mysqli->more_results() && $mysqli->next_result()); 
} 


$mysqli->close(); 

?>

+0

Какой смысл в проведении этих 2 запросов вместе? –

+2

mysqli_multi_query -> Выполняет один или несколько запросов, которые объединены точкой с запятой. Вам нужно добавить точку с запятой между вашими запросами. Я лично никогда не использовал multi_query, поэтому я не могу сообщить вам об этом – JoshStrange

+1

Это, в основном, копия-макароны с страницы документации по документации multi_query, http://php.net/manual/en/mysqli.multi-query.php, с незначительные изменения в структуре запросов. –

ответ

0

Вам нужна точка с запятой в конце первого запроса.

$query="SELECT query_title FROM administrator;"; 
$query.="SELECT thread_id FROM threads"; 

mysqli::multi_query

+0

Строгие стандарты: mysqli :: next_result() [mysqli.next-result]: Следующий результат не существует.Пожалуйста, вызовите mysqli_more_results()/mysqli :: more_results(), чтобы проверить, следует ли вызывать эту функцию/метод в C: \ xampp \ htdocs \ PoliticalForum2 \ test.php в строке 42 –

+0

что с этим строгим стандартом?!? –

+0

Если по «строгому стандарту» вы подразумеваете требуемую точку с запятой, помните, что вы просто складываете две строки. Когда ваш код запущен, запрос $ выглядит так: «SELECT query_title FROM administratorSELECT thread_id FROM threads» *. Ввод точки с запятой там говорит SQL, что вы закончили с одним утверждением и начинаете с другого. Насколько известно, вы имеете в виду * «administratorSELECT» * - это название таблицы ;-) – FakeRainBrigand

0

Причина, почему вы получите это предупреждение, это просто потому, что вы используете сделать ... в то время цикла, который оценивает состояние после выполнения команды блока. Поэтому, когда результатов больше нет, содержимое цикла выполняется еще один раз, что дает это предупреждение.

Использование while ($ mysql-> next_result()) ... цикл должен исправить это. (В общем случае: использование циклов посттестирования, как вы делали, довольно необычно в программировании базы данных)

Если код - это поэзия, я стараюсь быть Шекспиром!

-1

Я получил ответ за то же самое.

, пожалуйста, найдите мою функцию ниже.

public function executeStoredProcedureMulti($strQuery) 
{ 
    $yml = sfYaml::load(sfConfig::get('sf_config_dir').'/databases.yml'); 
    $params = $yml['all']['doctrine']['param']; 
    $dsnName = $params['dsn']; 
    $arrDsn = explode(";",$dsnName); 
    $hostName = explode("=",$arrDsn[0])[1]; 
    $schemaName = explode("=",$arrDsn[1])[1]; 
    $this->dbconn = mysqli_connect($hostName, $params['username'], $params['password'], $schemaName); 

    //return if connection was created successfully 
    if($this->dbconn) 
    { 
     mysqli_set_charset($this->dbconn,"utf8"); 
     //return true; 
    } 
    else 
    { 
     $this->nErrorNumber = mysqli_connect_errno(); 
     $this->strErrorDesc = mysqli_connect_error(); 
     return false; 
    } 


    //check if connection exists 
    if($this->dbconn) 
    { 

     /* close connection */ 
     //execute the query 
     if($this->dbconn->multi_query($strQuery)) 
     { 
      //create table array in dataset object 
      $dataSet = array(); 
      do { 
       //store first result set 
       if ($result = $this->dbconn->store_result()) 
       { 
        //create data table passing it the column data 
        $dataTable = new CDataTable($result->fetch_fields()); 

        //parse through each row 
        while ($row = $result->fetch_row()) 
        { 
         $dataTable->AddRow($row); 
        } 
        $result->free(); 
        $dataSet[] = $dataTable; 
       } 
       if (!$this->dbconn->more_results()) { 
        break; 
       } 
      } while ($this->dbconn->next_result()); 
      $this->dbconn->close(); 
      //return the complete dataset 
      return $dataSet; 
     } 
     else//save the error to member variables 
     { 
      $this->nErrorNumber = $this->dbconn->errno; 
      $this->strErrorDesc = $this->dbconn->error; 
     } 
    } 
    return false; 
} 

Это работа Необходимо создать класс CTableData. Пожалуйста, сделайте один, и он отлично подойдет .

0

Вы можете исправить это следующим образом:

if ($res) { 

    do { 
     $mycon->next_result(); //// instead of putting it in a while, put it here 

     if ($result = $mycon->store_result()) { 

      while ($row = $result->fetch_row()) { 

       foreach ($row as $cell) 

        $flag = $cell; 
      } 

      ///$result->close(); 
     } 
     $sale=$sale+1; 

    } while ($sale > 2); 
} 
+1

Пожалуйста, напишите на английском языке –

Смежные вопросы