<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/class.mysqli.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'zh',
  ),
  'this' => 
  array (
    0 => 'mysqli.query.php',
    1 => 'mysqli::query',
    2 => '对数据库执行查询',
  ),
  'up' => 
  array (
    0 => 'class.mysqli.php',
    1 => 'mysqli',
  ),
  'prev' => 
  array (
    0 => 'mysqli.prepare.php',
    1 => 'mysqli::prepare',
  ),
  'next' => 
  array (
    0 => 'mysqli.real-connect.php',
    1 => 'mysqli::real_connect',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'zh',
    'path' => 'reference/mysqli/mysqli/query.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="mysqli.query" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">mysqli::query</h1>
  <h1 class="refname">mysqli_query</h1>
  <p class="verinfo">(PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">mysqli::query</span> -- <span class="refname">mysqli_query</span> &mdash; <span class="dc-title">对数据库执行查询</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-mysqli.query-description">
  <h3 class="title">说明</h3>
  <p class="para">面向对象风格</p>
  <div class="methodsynopsis dc-description">
   <span class="modifier">public</span> <span class="modifier">function</span> <span class="methodname"><strong>mysqli::query</strong></span>(<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$query</code></span>, <span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$result_mode</code><span class="initializer"> = <strong><code><a href="mysqli.constants.php#constant.mysqli-store-result">MYSQLI_STORE_RESULT</a></code></strong></span></span>): <span class="type"><span class="type"><a href="class.mysqli-result.php" class="type mysqli_result">mysqli_result</a></span>|<span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></span></div>

  <p class="para rdfs-comment">过程化风格</p>
  <div class="methodsynopsis dc-description"><span class="modifier">function</span> <span class="methodname"><strong>mysqli_query</strong></span>(<span class="methodparam"><span class="type"><a href="class.mysqli.php" class="type mysqli">mysqli</a></span> <code class="parameter">$mysql</code></span>, <span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$query</code></span>, <span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$result_mode</code><span class="initializer"> = <strong><code><a href="mysqli.constants.php#constant.mysqli-store-result">MYSQLI_STORE_RESULT</a></code></strong></span></span>): <span class="type"><span class="type"><a href="class.mysqli-result.php" class="type mysqli_result">mysqli_result</a></span>|<span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></span></div>

  <p class="para rdfs-comment">
   对数据库执行 <code class="parameter">query</code>。
  </p>
  <div class="warning"><strong class="warning">警告</strong>
<h1 class="title">Security warning: SQL injection</h1><p class="simpara">If the query contains any variable
input then <a href="mysqli.quickstart.prepared-statements.php" class="link">parameterized
prepared statements</a> should be used instead. Alternatively, the
data must be properly formatted and all strings must be escaped using
the <span class="function"><a href="mysqli.real-escape-string.php" class="function">mysqli_real_escape_string()</a></span>
function.</p></div>
  <p class="para">
   对非 DML 查询（不是 INSERT、UPDATE 或 DELETE），此函数类似于调用 <span class="function"><a href="mysqli.real-query.php" class="function">mysqli_real_query()</a></span>
   然后调用 <span class="function"><a href="mysqli.use-result.php" class="function">mysqli_use_result()</a></span> 或 <span class="function"><a href="mysqli.store-result.php" class="function">mysqli_store_result()</a></span>。
  </p>
  <blockquote class="note"><p><strong class="note">注意</strong>: 
   <p class="para">
    传递给 <span class="function"><strong>mysqli_query()</strong></span> 的语句长度比服务器的 <code class="literal">max_allowed_packet</code>
    长的情况下，返回的错误码不同，具体取决于使用的是 MySQL Native Driver（<code class="literal">mysqlnd</code>）还是
    MySQL Client Library（<code class="literal">libmysqlclient</code>）。行为如下：
   </p>
   <ul class="itemizedlist">
    <li class="listitem">
     <p class="para">
      Linux 上 <code class="literal">mysqlnd</code> 返回错误码 1153。错误消息表示为 <q class="quote">got a packet bigger than
      <code class="literal">max_allowed_packet</code> bytes</q>。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Windows 上 <code class="literal">mysqlnd</code> 返回错误码 2006。错误消息表示为 <q class="quote">server has gone away</q>。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      <code class="literal">libmysqlclient</code> 在所有平台返回错误码 2006。错误消息表示为 <q class="quote">server has gone
      away</q>。
     </p>
    </li>
   </ul>
  </p></blockquote>
 </div>


 <div class="refsect1 parameters" id="refsect1-mysqli.query-parameters">
  <h3 class="title">参数</h3>
  <p class="para">
   <dl>
    <dt>
<code class="parameter">mysql</code></dt><dd><span class="simpara">仅以过程化样式：由 <span class="function"><a href="function.mysqli-connect.php" class="function">mysqli_connect()</a></span> 或
<span class="function"><a href="mysqli.init.php" class="function">mysqli_init()</a></span> 返回的 <span class="classname"><a href="class.mysqli.php" class="classname">mysqli</a></span> 对象。</span></dd>
    
     <dt><code class="parameter">query</code></dt>
     <dd>
      <p class="para">
       查询字符串。
      </p>
     </dd>
    
    
     <dt><code class="parameter">result_mode</code></dt>
     <dd>
      <p class="para">
       The result mode can be one of 3 constants indicating how the result will
       be returned from the MySQL server.
      </p>
      <p class="para">
       <strong><code><a href="mysqli.constants.php#constant.mysqli-store-result">MYSQLI_STORE_RESULT</a></code></strong>（默认）——返回带有缓冲结果集的 <span class="classname"><a href="class.mysqli-result.php" class="classname">mysqli_result</a></span> 对象。
      </p>
      <p class="para">
       <strong><code><a href="mysqli.constants.php#constant.mysqli-use-result">MYSQLI_USE_RESULT</a></code></strong> - returns a
       <span class="classname"><a href="class.mysqli-result.php" class="classname">mysqli_result</a></span> object with unbuffered result set. 
       As long as there are pending records waiting to be fetched, the
       connection line will be busy and all subsequent calls will return error 
       <code class="literal">Commands out of sync</code>. To avoid the error all records 
       must be fetched from the server or the result set must be discarded by
       calling <span class="function"><a href="mysqli-result.free.php" class="function">mysqli_free_result()</a></span>.
      </p>
      <p class="para">
       <strong><code><a href="mysqli.constants.php#constant.mysqli-async">MYSQLI_ASYNC</a></code></strong>（适用于 mysqlnd）——执行异步查询且并不立即返回结果。然后使用
       <span class="function"><a href="mysqli.poll.php" class="function">mysqli_poll()</a></span> 从此类查询中获取结果。与 <strong><code><a href="mysqli.constants.php#constant.mysqli-store-result">MYSQLI_STORE_RESULT</a></code></strong>
       或 <strong><code><a href="mysqli.constants.php#constant.mysqli-use-result">MYSQLI_USE_RESULT</a></code></strong> 常量结合使用。
      </p>
     </dd>
    
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-mysqli.query-returnvalues">
  <h3 class="title">返回值</h3>
  <p class="para">
   失败时返回 <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>。对于生成结果集的成功查询，比如 <code class="literal">SELECT, SHOW, DESCRIBE</code> 或
   <code class="literal">EXPLAIN</code>，<span class="function"><strong>mysqli_query()</strong></span> 将返回 <span class="classname"><a href="class.mysqli-result.php" class="classname">mysqli_result</a></span>
   对象。对其它成功查询，<span class="function"><strong>mysqli_query()</strong></span> 将返回 <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>。
  </p>
 </div>


<div class="refsect1 errors" id="refsect1-mysqli.query-errors">
  <h3 class="title">错误／异常</h3>
  <p class="simpara">
If mysqli error reporting is enabled (<strong><code><a href="mysqli.constants.php#constant.mysqli-report-error">MYSQLI_REPORT_ERROR</a></code></strong>) and the requested operation fails,
a warning is generated. If, in addition, the mode is set to <strong><code><a href="mysqli.constants.php#constant.mysqli-report-strict">MYSQLI_REPORT_STRICT</a></code></strong>,
a <span class="classname"><a href="class.mysqli-sql-exception.php" class="classname">mysqli_sql_exception</a></span> is thrown instead.</p>
 </div>


 <div class="refsect1 examples" id="refsect1-mysqli.query-examples">
  <h3 class="title">示例</h3>
  <div class="example" id="example-1">
   <p><strong>示例 #1 <span class="methodname"><strong>mysqli::query()</strong></span> 示例</strong></p>
   <div class="example-contents"><p>面向对象风格</p></div>
   <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php

mysqli_report</span><span style="color: #007700">(</span><span style="color: #0000BB">MYSQLI_REPORT_ERROR </span><span style="color: #007700">| </span><span style="color: #0000BB">MYSQLI_REPORT_STRICT</span><span style="color: #007700">);
</span><span style="color: #0000BB">$mysqli </span><span style="color: #007700">= new </span><span style="color: #0000BB">mysqli</span><span style="color: #007700">(</span><span style="color: #DD0000">"localhost"</span><span style="color: #007700">, </span><span style="color: #DD0000">"my_user"</span><span style="color: #007700">, </span><span style="color: #DD0000">"my_password"</span><span style="color: #007700">, </span><span style="color: #DD0000">"world"</span><span style="color: #007700">);

</span><span style="color: #FF8000">/* Create table doesn't return a resultset */
</span><span style="color: #0000BB">$mysqli</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(</span><span style="color: #DD0000">"CREATE TEMPORARY TABLE myCity LIKE City"</span><span style="color: #007700">);
</span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">"Table myCity successfully created.\n"</span><span style="color: #007700">);

</span><span style="color: #FF8000">/* Select queries return a resultset */
</span><span style="color: #0000BB">$result </span><span style="color: #007700">= </span><span style="color: #0000BB">$mysqli</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT Name FROM City LIMIT 10"</span><span style="color: #007700">);
</span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">"Select returned %d rows.\n"</span><span style="color: #007700">, </span><span style="color: #0000BB">$result</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">num_rows</span><span style="color: #007700">);

</span><span style="color: #FF8000">/* If we have to retrieve large amount of data we use MYSQLI_USE_RESULT */
</span><span style="color: #0000BB">$result </span><span style="color: #007700">= </span><span style="color: #0000BB">$mysqli</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT * FROM City"</span><span style="color: #007700">, </span><span style="color: #0000BB">MYSQLI_USE_RESULT</span><span style="color: #007700">);

</span><span style="color: #FF8000">/* Note, that we can't execute any functions which interact with the
    server until all records have been fully retrieved or the result
    set was closed. All calls will return an 'out of sync' error */
</span><span style="color: #0000BB">$mysqli</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SET @a:='this will not work'"</span><span style="color: #007700">);</span></code></pre></div>
   </div>

   <div class="example-contents"><p>过程化风格</p></div>
   <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php

mysqli_report</span><span style="color: #007700">(</span><span style="color: #0000BB">MYSQLI_REPORT_ERROR </span><span style="color: #007700">| </span><span style="color: #0000BB">MYSQLI_REPORT_STRICT</span><span style="color: #007700">);
</span><span style="color: #0000BB">$link </span><span style="color: #007700">= </span><span style="color: #0000BB">mysqli_connect</span><span style="color: #007700">(</span><span style="color: #DD0000">"localhost"</span><span style="color: #007700">, </span><span style="color: #DD0000">"my_user"</span><span style="color: #007700">, </span><span style="color: #DD0000">"my_password"</span><span style="color: #007700">, </span><span style="color: #DD0000">"world"</span><span style="color: #007700">);

</span><span style="color: #FF8000">/* Create table doesn't return a resultset */
</span><span style="color: #0000BB">mysqli_query</span><span style="color: #007700">(</span><span style="color: #0000BB">$link</span><span style="color: #007700">, </span><span style="color: #DD0000">"CREATE TEMPORARY TABLE myCity LIKE City"</span><span style="color: #007700">);
</span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">"Table myCity successfully created.\n"</span><span style="color: #007700">);

</span><span style="color: #FF8000">/* Select queries return a resultset */
</span><span style="color: #0000BB">$result </span><span style="color: #007700">= </span><span style="color: #0000BB">mysqli_query</span><span style="color: #007700">(</span><span style="color: #0000BB">$link</span><span style="color: #007700">, </span><span style="color: #DD0000">"SELECT Name FROM City LIMIT 10"</span><span style="color: #007700">);
</span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">"Select returned %d rows.\n"</span><span style="color: #007700">, </span><span style="color: #0000BB">mysqli_num_rows</span><span style="color: #007700">(</span><span style="color: #0000BB">$result</span><span style="color: #007700">));

</span><span style="color: #FF8000">/* If we have to retrieve large amount of data we use MYSQLI_USE_RESULT */
</span><span style="color: #0000BB">$result </span><span style="color: #007700">= </span><span style="color: #0000BB">mysqli_query</span><span style="color: #007700">(</span><span style="color: #0000BB">$link</span><span style="color: #007700">, </span><span style="color: #DD0000">"SELECT * FROM City"</span><span style="color: #007700">, </span><span style="color: #0000BB">MYSQLI_USE_RESULT</span><span style="color: #007700">);

</span><span style="color: #FF8000">/* Note, that we can't execute any functions which interact with the
    server until all records have been fully retrieved or the result
    set was closed. All calls will return an 'out of sync' error */
</span><span style="color: #0000BB">mysqli_query</span><span style="color: #007700">(</span><span style="color: #0000BB">$link</span><span style="color: #007700">, </span><span style="color: #DD0000">"SET @a:='this will not work'"</span><span style="color: #007700">);</span></code></pre></div>
   </div>

   <div class="example-contents"><p>以上示例的输出类似于：</p></div>
   <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">Table myCity successfully created.
Select returned 10 rows.

Fatal error: Uncaught mysqli_sql_exception: Commands out of sync; you can&#039;t run this command now in...</pre>
</div>
   </div>
  </div>
 </div>


 <div class="refsect1 seealso" id="refsect1-mysqli.query-seealso">
  <h3 class="title">参见</h3>
  <p class="para">
   <ul class="simplelist">
    <li><span class="function"><a href="mysqli.execute-query.php" class="function" rel="rdfs-seeAlso">mysqli_execute_query()</a> - Prepares, binds parameters, and executes SQL statement</span></li>
    <li><span class="function"><a href="mysqli.real-query.php" class="function" rel="rdfs-seeAlso">mysqli_real_query()</a> - 执行一个mysql查询</span></li>
    <li><span class="function"><a href="mysqli.multi-query.php" class="function" rel="rdfs-seeAlso">mysqli_multi_query()</a> - 在数据库上执行一个或多个查询</span></li>
    <li><span class="function"><a href="mysqli.prepare.php" class="function" rel="rdfs-seeAlso">mysqli_prepare()</a> - 预处理执行 SQL</span></li>
    <li><span class="function"><a href="mysqli-result.free.php" class="function" rel="rdfs-seeAlso">mysqli_free_result()</a> - Frees the memory associated with a result</span></li>
   </ul>
  </p>
 </div>


</div><?php manual_footer($setup); ?>