2011-12-21 57 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一起的地步? – 2011-12-21 14:53:39

+2

mysqli_multi_query - >执行一个或多个用分号连接的查询。 您需要在查询之间添加分号。我个人从来没有使用multi_query所以我不能劝你过去那种 – JoshStrange 2011-12-21 14:54:40

+1

这是从multi_query PHP文档页面,http://php.net/manual/en/mysqli.multi-query.php,与基本复制面食查询结构的细微变化。 – 2011-12-21 14:55:30

回答

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()来检查是否在第42行的C:\ xampp \ htdocs \ PoliticalForum2 \ test.php中调用此函数/方法 – 2011-12-21 15:02:36

+0

该严格标准是什么?!? – 2011-12-21 15:02:46

+0

如果用“严格标准”表示所需的分号,请记住您只是将两个字符串放在一起。当你的代码运行时,$ query看起来像*“SELECT query_title FROM administratorSELECT thread_id FROM threads”*。把分号放在那里告诉SQL你已经完成了一条语句,然后开始另一条语句。据它知道,你的意思是*“administratorSELECT”*是表的名称;-) – FakeRainBrigand 2011-12-21 16:11:58

0

为什么你得到这样的警告的原因,完全是因为你用做... while循环运行命令块之后计算该条件。因此,当没有更多结果时,循环的内容会再运行一次,产生该警告。

使用一段时间($ mysql-> next_result())... DO循环应该解决这个问题。 (在一般注意事项:使用后测试循环像你这样是在数据库编程相当少见)

如果代码是诗,我想是莎士比亚!

-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

请用英语写 – 2013-11-03 18:56:02