mysqli::execute_query

mysqli_execute_query

(PHP 8 >= 8.2.0)

mysqli::execute_query -- mysqli_execute_query准备、绑定参数并执行 SQL 语句

描述

面向对象风格

public mysqli::execute_query(string $query, ?array $params = null): mysqli_result|bool

过程式风格

mysqli_execute_query(mysqli $mysql, string $query, ?array $params = null): mysqli_result|bool

准备 SQL 查询、绑定参数并执行它。 mysqli::execute_query() 方法是 mysqli::prepare()mysqli_stmt::bind_param()mysqli_stmt::execute()mysqli_stmt::get_result() 的快捷方式。

语句模板可以包含零个或多个问号 (?) 参数标记,也称为占位符。参数值必须作为 array 使用 params 参数提供。

在幕后创建了一个准备好的语句,但它从未在函数外部暴露。无法访问语句的属性,就像使用 mysqli_stmt 对象一样。由于这个限制,状态信息被复制到 mysqli 对象,并且可以使用其方法访问,例如 mysqli_affected_rows()mysqli_error()

注意:

在将语句传递给 mysqli_execute_query() 的情况下,该语句比服务器的 max_allowed_packet 长,返回的错误代码将根据操作系统而不同。行为如下

  • 在 Linux 上返回错误代码 1153。错误消息意味着 收到一个比 max_allowed_packet 字节更大的数据包

  • 在 Windows 上返回错误代码 2006。此错误消息意味着 服务器已断开

参数

mysql

仅过程式风格:由 mysqli_connect()mysqli_init() 返回的 mysqli 对象

query

查询,以字符串形式表示。它必须包含一个 SQL 语句。

SQL 语句可以包含零个或多个参数标记,这些标记由问号 (?) 字符表示,位于适当的位置。

注意:

标记仅在 SQL 语句中的某些位置合法。例如,它们在 INSERT 语句的 VALUES() 列表中(用于指定行的列值)或在 WHERE 子句中与列进行比较以指定比较值时是允许的。但是,它们在标识符(如表名或列名)中是不允许的。

params

一个可选的列表 array,其中包含与正在执行的 SQL 语句中绑定的参数一样多的元素。每个值都被视为 string

返回值

如果失败,则返回 false。对于产生结果集的成功查询,例如 SELECT, SHOW, DESCRIBEEXPLAIN,返回一个 mysqli_result 对象。对于其他成功查询,返回 true

示例

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

面向对象风格

<?php

mysqli_report
(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');

$query = 'SELECT Name, District FROM City WHERE CountryCode=? ORDER BY Name LIMIT 5';
$result = $mysqli->execute_query($query, ['DEU']);
foreach (
$result as $row) {
printf("%s (%s)\n", $row["Name"], $row["District"]);
}

过程式风格

<?php

mysqli_report
(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = mysqli_connect("localhost", "my_user", "my_password", "world");

$query = 'SELECT Name, District FROM City WHERE CountryCode=? ORDER BY Name LIMIT 5';
$result = mysqli_execute_query($link, $query, ['DEU']);
foreach (
$result as $row) {
printf("%s (%s)\n", $row["Name"], $row["District"]);
}

上面的示例将输出类似于以下内容

Aachen (Nordrhein-Westfalen)
Augsburg (Baijeri)
Bergisch Gladbach (Nordrhein-Westfalen)
Berlin (Berliini)
Bielefeld (Nordrhein-Westfalen)

参见

添加笔记

用户贡献的笔记 1 条笔记

1
theking2(at)king(dot).co.
7 个月前
一个函数,用于调用存储过程,该存储过程具有任意数量的 IN 参数和一个 OUT 参数,例如返回受影响的行数。函数的返回值就是这个值。

<?php

/**
* call_sp 调用指定存储过程,并传递给定的参数。
* 第一个参数是存储过程的名称。
* 其余参数是存储过程的(in)参数。
* 最后一个(out)参数应该是一个 int,例如状态或受影响的行数。
*
* @param mixed $sp_name 要调用的存储过程的名称。
* @param mixed $params 要传递给存储过程的参数。
* @return int 受影响的行数。
*/
function call_sp( \mysqli $db, string $sp_name, ...$params ): int
{
$sql = "CALL $sp_name( ";
$sql .= implode( ", ", array_fill( 0, count( $params ), "?" ) );
$sql .= ", @__affected );";

$result = $db->execute_query( $sql, $params );
$result = $db->query( "select @__affected;" );
$affected = (int) $result->fetch_column( 0 );
return
$affected;
}
To Top