mysqli и multi_query не работают - PullRequest
4 голосов
/ 21 декабря 2011
 <?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();

?>

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

ОБНОВЛЕНИЕ:

Строгие стандарты: mysqli :: next_result () [mysqli.next-result]: нет следующего набора результатов.Пожалуйста, вызовите mysqli_more_results () / mysqli :: more_results (), чтобы проверить, следует ли вызывать эту функцию / метод в C: \ xampp \ htdocs \ politForum2 \ 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();

?>

Ответы [ 4 ]

0 голосов
/ 03 ноября 2013

Вы можете исправить это так:

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);
}
0 голосов
/ 24 сентября 2013

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

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

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

0 голосов
/ 16 октября 2013

Я получил ответ для того же.

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

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 голосов
/ 21 декабря 2011

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

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

MySQLi :: multi_query

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...