10bet网址
MySQL PHP API
下载本手册

3.2.3执行语句

PHP文档组版权所有。10bet官方网站

语句可以使用mysqli:查询mysqli: real_query而且mysqli: multi_query.的mysqli:查询函数是最常见的,它在一次调用中将执行语句与其结果集(如果有的话)的缓冲获取结合在一起。调用mysqli:查询和调用相同mysqli: real_query紧随其后的是mysqli: store_result

例3.6执行查询

<?php MYSQLI_REPORT_ERROR (MYSQLI_REPORT_STRICT);$mysqli = new mysqli("example.com", "user", "password", "database");$mysqli->查询(“DROP TABLE IF EXISTS test”);$mysqli->查询("CREATE TABLE test(id INT)");


缓冲的结果集

语句执行之后,可以一次性检索所有结果,也可以逐行从服务器读取结果。客户端结果集缓冲允许服务器尽早释放与语句结果相关的资源。一般来说,客户端使用结果集的速度很慢。因此,建议使用缓冲的结果集。mysqli:查询结合语句执行和结果集缓冲。

PHP应用程序可以自由地浏览缓冲的结果。导航速度很快,因为结果集保存在客户机内存中。请记住,按客户端扩展通常比按服务器扩展更容易。

示例3.7浏览缓冲结果

<?php MYSQLI_REPORT_ERROR (MYSQLI_REPORT_STRICT);$mysqli = new mysqli("example.com", "user", "password", "database");$mysqli->查询(“DROP TABLE IF EXISTS test”);$mysqli->查询("CREATE TABLE test(id INT)");$mysqli->查询("INSERT INTO test(id) VALUES (1), (2), (3)");$result = $mysqli->查询(“SELECT id FROM test ORDER BY id ASC”);echo "Reverse order…\n";$row_no = $result->num_rows - 1;$row_no >= 0; $row_no--) { $result->data_seek($row_no); $row = $result->fetch_assoc(); echo " id = " . $row['id'] . "\n"; } echo "Result set order...\n"; foreach ($result as $row) { echo " id = " . $row['id'] . "\n"; }

上面的例子将输出:

相反的顺序…id = 3 id = 2 id = 1 Result set order…Id = 1 Id = 2 Id = 3


未缓冲的结果集

如果客户端内存是一种短资源,并且不需要尽早释放服务器资源以保持服务器低负载,则可以使用未缓冲的结果。在读取所有行之前,无法滚动未缓冲的结果。

例3.8浏览未缓冲的结果

<?php $mysqli->real_query(“SELECT id FROM test ORDER BY id ASC”);$mysqli = $mysqli->use_result();echo“结果集顺序…\n”;Foreach ($result as $row) {echo " id = "。行美元(“id”)。“\ n”;}


结果集值数据类型

mysqli:查询mysqli: real_query而且mysqli: multi_query函数用于执行非准备语句。在MySQL客户端服务器协议级别,命令COM_QUERY而文本协议则用于语句执行。使用文本协议,MySQL服务器在发送之前将结果集的所有数据转换为字符串。无论SQL结果集列数据类型如何,都可以完成此转换。mysql客户端库接收所有列值作为字符串。没有进一步的客户端强制转换来将列转换回它们的本机类型。相反,所有值都以PHP字符串的形式提供。

例3.9文本协议默认返回字符串

<?php MYSQLI_REPORT_ERROR (MYSQLI_REPORT_STRICT);$mysqli = new mysqli("example.com", "user", "password", "database");$mysqli->查询(“DROP TABLE IF EXISTS test”);$mysqli->查询("CREATE TABLE test(id INT, label CHAR(1))");$mysqli->查询("INSERT INTO test(id, label) VALUES (1, 'a')");$mysqli->查询(“SELECT id, label FROM test WHERE id = 1”);$row = $result->fetch_assoc();printf (" id = % s (% s) \ n”,行“id”,美元方法($ row [' id ']));printf("标签= % s (% s) \ n”,行“标签”,美元方法($ row['标签']));

上面的例子将输出:

Id = 1 (string) label = a (string)


属性可以将整数列和浮点列转换回PHP数字MYSQLI_OPT_INT_AND_FLOAT_NATIVE连接选项,如果使用mysqlnd库。如果设置了,mysqlnd库将检查结果集元数据列类型,并将数值SQL列转换为PHP数字,如果PHP数据类型值范围允许的话。例如,通过这种方式,SQL INT列将作为整数返回。

带mysqlnd和connection选项的本机数据类型

<?php MYSQLI_REPORT_ERROR (MYSQLI_REPORT_STRICT);$mysqli = new mysqli();mysqli - >选项(MYSQLI_OPT_INT_AND_FLOAT_NATIVE, 1);$mysqli->real_connect("example.com", "用户","密码","数据库");$mysqli->查询(“DROP TABLE IF EXISTS test”);$mysqli->查询("CREATE TABLE test(id INT, label CHAR(1))");$mysqli->查询("INSERT INTO test(id, label) VALUES (1, 'a')");$mysqli->查询(“SELECT id, label FROM test WHERE id = 1”);$row = $result->fetch_assoc(); printf("id = %s (%s)\n", $row['id'], gettype($row['id'])); printf("label = %s (%s)\n", $row['label'], gettype($row['label']));

上面的例子将输出:

Id = 1(整数)label = a(字符串)


另请参阅

mysqli: __construct
mysqli:选项
mysqli: real_connect
mysqli:查询
mysqli: multi_query
mysqli: use_result
mysqli: store_result