语句可以使用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 |