首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysqli::query

(PHP 5, PHP 7)

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

描述

面向对象的风格

代码语言:javascript
复制
mixed mysqli::query ( string $query [, int $resultmode = MYSQLI_STORE_RESULT ] )

程序风格

代码语言:javascript
复制
mixed mysqli_query ( mysqli $link , string $query [, int $resultmode = MYSQLI_STORE_RESULT ] )

对数据库执行一次query

对于非DML查询(不是INSERT,UPDATE或DELETE),该函数类似于调用mysqli_real_query(),后跟mysqli_use_result()或mysqli_store_result()。

注意:如果将语句传递给服务器的max_allowed_pa​​cket的语句长度超过mysqli_query(),则返回的错误代码根据您使用的是MySQL本机驱动程序(mysqlnd)还是MySQL客户端库(libmysqlclient)而有所不同。行为如下:

  • Linux上的mysqlnd 返回一个1153的错误代码。错误消息表示“得到的数据包大于max_allowed_pa​​cket字节”。
  • Windows上的mysqlnd返回错误代码2006.此错误消息意味着“服务器已经消失”。
  • 所有平台上的ibmysqlclient都会返回错误代码2006.

参数

link

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

query

查询字符串。

查询中的数据应正确转义

resultmode

要么是常数,MYSQLI_USE_RESULT要么 MYSQLI_STORE_RESULT取决于期望的行为。默认情况下,MYSQLI_STORE_RESULT使用。

如果你使用MYSQLI_USE_RESULT所有后续的调用,将会返回错误的命令不同步,除非你调用mysqli_free_result()

MYSQLI_ASYNC(可用于mysqlnd),可以异步执行查询。 然后使用mysqli_poll()从这些查询中获取结果。

返回值

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

更新日志

版本

说明

5.3.0

增加了异步查询的功能。

范例

示例#1 mysqli :: query()示例

面向对象风格

<?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); ?>

以上例程会输出:

代码语言:javascript
复制
表myCity成功创建。
选择返回的10行。
错误:命令不同步; 你现在不能运行这个命令

参见

  • mysqli_real_query() - 执行一个SQL查询
  • mysqli_multi_query() - 对数据库执行查询

← mysqli::prepare

mysqli::real_connect →

扫码关注腾讯云开发者

领取腾讯云代金券