Php/docs/mysqli.query

来自菜鸟教程
跳转至:导航、​搜索

mysqli::query

mysqli_query

(PHP 5, PHP 7)

mysqli::query -- mysqli_query对数据库执行一次查询


说明

面向对象风格

mysqli::query ( string $query [, int $resultmode = MYSQLI_STORE_RESULT ] ) : mixed

过程化风格

mysqli_query ( mysqli $link , string $query [, int $resultmode = MYSQLI_STORE_RESULT ] ) : mixed

Performs a query against the database.

For non-DML queries (not INSERT, UPDATE or DELETE), this function is similar to calling mysqli_real_query() followed by either mysqli_use_result() or mysqli_store_result().

Note:

In the case where you pass a statement to mysqli_query() that is longer than max_allowed_packet of the server, the returned error codes are different depending on whether you are using MySQL Native Driver (mysqlnd) or MySQL Client Library (libmysqlclient). The behavior is as follows:

  • mysqlnd on Linux returns an error code of 1153. The error message means “got a packet bigger than max_allowed_packet bytes”.
  • mysqlnd on Windows returns an error code 2006. This error message means “server has gone away”.
  • libmysqlclient on all platforms returns an error code 2006. This error message means “server has gone away”.

参数

link

仅以过程化样式:由mysqli_connect()mysqli_init() 返回的链接标识。

query

The query string.

Data inside the query should be properly escaped.

resultmode

Either the constant MYSQLI_USE_RESULT or MYSQLI_STORE_RESULT depending on the desired behavior. By default, MYSQLI_STORE_RESULT is used.

If you use MYSQLI_USE_RESULT all subsequent calls will return error Commands out of sync unless you call mysqli_free_result()

With MYSQLI_ASYNC (available with mysqlnd), it is possible to perform query asynchronously. mysqli_poll() is then used to get results from such queries.


返回值

失败时返回 false,通过mysqli_query() 成功执行SELECT, SHOW, DESCRIBEEXPLAIN查询会返回一个mysqli_result 对象,其他查询则返回true


更新日志

版本 说明
5.3.0 Added the ability of async queries.


范例

Example #1 mysqli::query() example

面向对象风格


<?php$mysqli = new mysqli("localhost", "my_user", "my_password", "world");/* check connection */if ($mysqli->connect_errno) {    printf("Connect failed: %s\n", $mysqli->connect_error);    exit();}/* Create table doesn't return a resultset */if ($mysqli->query("CREATE TEMPORARY TABLE myCity LIKE City") === TRUE) {    printf("Table myCity successfully created.\n");}/* Select queries return a resultset */if ($result = $mysqli->query("SELECT Name FROM City LIMIT 10")) {    printf("Select returned %d rows.\n", $result->num_rows);    /* free result set */    $result->close();}/* If we have to retrieve large amount of data we use MYSQLI_USE_RESULT */if ($result = $mysqli->query("SELECT * FROM City", MYSQLI_USE_RESULT)) {    /* Note, that we can't execute any functions which interact with the       server until result set was closed. All calls will return an       'out of sync' error */    if (!$mysqli->query("SET @a:='this will not work'")) {        printf("Error: %s\n", $mysqli->error);    }    $result->close();}$mysqli->close();?>

过程化风格


<?php$link = mysqli_connect("localhost", "my_user", "my_password", "world");/* check connection */if (mysqli_connect_errno()) {    printf("Connect failed: %s\n", mysqli_connect_error());    exit();}/* Create table doesn't return a resultset */if (mysqli_query($link, "CREATE TEMPORARY TABLE myCity LIKE City") === TRUE) {    printf("Table myCity successfully created.\n");}/* Select queries return a resultset */if ($result = mysqli_query($link, "SELECT Name FROM City LIMIT 10")) {    printf("Select returned %d rows.\n", mysqli_num_rows($result));    /* free result set */    mysqli_free_result($result);}/* If we have to retrieve large amount of data we use MYSQLI_USE_RESULT */if ($result = mysqli_query($link, "SELECT * FROM City", MYSQLI_USE_RESULT)) {    /* Note, that we can't execute any functions which interact with the       server until result set was closed. All calls will return an       'out of sync' error */    if (!mysqli_query($link, "SET @a:='this will not work'")) {        printf("Error: %s\n", mysqli_error($link));    }    mysqli_free_result($result);}mysqli_close($link);?>

以上例程会输出:


Table myCity successfully created.
Select returned 10 rows.
Error: Commands out of sync;  You can't run this command now

参见