php预处理获取改变行数,php – 使用MySQLi预处理语句时无法获取行数...

如果要使用mysqli_stmt :: $num_rows(即,检查预准备语句中的行数),则需要在执行预准备语句之后使用$stmt-> store_result(),然后才能检查其数量行.这意味着在我们检查返回的行数之前,结果存储在内存中.

$stmt = $conn->prepare($sql);

$stmt->bind_param('ss',$log_username,$log_username);

$stmt->execute();

$stmt->store_result(); // Need to store the result into memory first

if ($stmt->num_rows) {

// ...

但是,如果你想使用mysqli_result :: $num_rows(在你从语句结果转换的MySQLi结果上),你需要在执行$result = $stmt-> get_result();之后这样做,并使用$result – > num_rows;,如下所示.

$stmt = $conn->prepare($sql);

$stmt->bind_param('ss',$log_username,$log_username);

$stmt->execute();

$result = $stmt->get_result();

if ($result->num_rows) {

while ($row = $result->fetch_assoc()) {

// ....

最后,他们应该最终做同样的事情 – 提供原始准备查询返回的一些行.

注意

请务必注意,您不能在同一语句中使用store_result()和get_result().这意味着在第一个示例中,您无法转换为mysqli-result对象(通过使用get_result(),它允许您使用标准的fetch_assoc()方法).由于store_result()将结果存储到内存中,因此get_result()无需转换,反之亦然.

这意味着如果使用store_result(),则需要通过statement-fetch,mysqli_stmt :: fetch()获取并通过mysqli_stmt :: bind_result()绑定结果.如果使用get_result(),则应检查生成的MySQLi结果对象上的行数(如第二个示例所示).

你应该为此构建你的代码,这样你只需要使用其中一个.

话虽如此,使用评论中建议的affected_rows不是正确的工具 – 根据mysqli_stmt :: $affected_rows上的手册(同样适用于常规查询,mysqli :: $affected_rows):

Returns the number of rows affected by INSERT, UPDATE, or DELETE query.

This function only works with queries which update a table. In order to get the number of rows from a SELECT query, use mysqli_stmt_num_rows() instead.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用mysqli_stmt类处理SELECT查询结果需要经过以下几个步骤: 1. 准备预处理语句使用mysqli_prepare()函数准备预处理语句。 2. 绑定参数(如果有):如果预处理语句中有占位符,需要使用mysqli_stmt_bind_param()函数将参数绑定到占位符上。 3. 执行预处理语句使用mysqli_stmt_execute()函数执行预处理语句。 4. 获取结果集:使用mysqli_stmt_get_result()函数获取结果集。 5. 遍历结果集:使用mysqli_fetch_array()、mysqli_fetch_assoc()等函数遍历结果集,获取每一行数据。 下面是一个示例代码: ``` // 连接数据库 $mysqli = new mysqli("localhost", "user", "password", "database"); // 准备预处理语句 $stmt = mysqli_prepare($mysqli, "SELECT * FROM users WHERE id > ?"); // 绑定参数 $id = 2; mysqli_stmt_bind_param($stmt, "i", $id); // 执行预处理语句 mysqli_stmt_execute($stmt); // 获取结果集 $result = mysqli_stmt_get_result($stmt); // 遍历结果集 while ($row = mysqli_fetch_assoc($result)) { echo "id: " . $row["id"] . ", name: " . $row["name"] . "<br>"; } // 关闭预处理语句和数据库连接 mysqli_stmt_close($stmt); mysqli_close($mysqli); ``` 在该示例中,我们使用mysqli_prepare()函数准备了一条预处理语句,该语句查询了id大于2的用户信息。接着,我们使用mysqli_stmt_bind_param()函数将参数2绑定到了占位符上。然后,使用mysqli_stmt_execute()函数执行了预处理语句,并使用mysqli_stmt_get_result()函数获取了结果集。最后,我们使用mysqli_fetch_assoc()函数遍历了结果集,将每一行数据输出到了页面上。最后,我们关闭了预处理语句和数据库连接。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值