【问题标题】:mysqli_num_rows returns false but data is added to database [duplicate]mysqli_num_rows 返回 false,但数据已添加到数据库 [重复]
【发布时间】:2018-10-02 14:53:12
【问题描述】:

我遇到了一个错误

代码如下:

<?php

//db connection

$dbserv="localhost:3306";
$dbuser="root";
$dbpass="firepower";
$dbname="account_data";
$db_connect=new mysqli($dbserv, $dbuser, $dbpass, $dbname);

if($db_connect->connect_errno){
    die("Error trying to connect to database");
}

session_start();

if(isset($_SESSION['current_page'])){
  $prev_page=$_SESSION['current_page'];
  $_SESSION['current_page'] = basename($_SERVER['PHP_SELF']);
}
else{
  $prev_page='';
}

if(!isset($_SESSION['email'])){
  header('location:'.'index.php?_rdr');
  die();
}

$limit=$_SESSION['limit'];
$index=1;
$first=true;
$products_ordered='';

while($index<=$limit){
  if(isset($_POST[$index]) && $first==true){
    $products_ordered.=$_POST[$index].' x Pizza '.$_SESSION['prod_name'][$index];
    $first=false;
  }
  else if(isset($_POST[$index]) && $first==false){
    $products_ordered.=', '.$_POST[$index].' x Pizza '.$_SESSION['prod_name'][$index];
  }
  $index++;
}

//insert order into db

$user_email=$_SESSION['email'];
$total_price=$_SESSION['order_price'];

$query="INSERT INTO orders (email, products_ordered, total_price) VALUES (?, ?, ?)";
$sql_sec=$db_connect->prepare($query);
$sql_sec->bind_param("ssi", $user_email, $products_ordered, $total_price);
$sql_sec->execute();
$result=$sql_sec->get_result();


if(mysqli_num_rows($result)){
  exit("Order added successfully!");
}
else{
  exit("Error connecting to database!");
}

?>

这很奇怪,因为数据已正确添加到我的数据库中,而其他时候我使用相同的代码(用于用户注册)它没有任何问题...我检查了所有内容,但找不到问题。

$query="INSERT INTO orders (email, products_ordered, total_price) VALUES (?, ?, ?)";
$sql_sec=$db_connect->prepare($query);
$sql_sec->bind_param("ssi", $user_email, $products_ordered, $total_price);
$sql_sec->execute();
$result=$sql_sec->get_result();


if(mysqli_num_rows($result)){
  exit("Order added successfully!");
}
else{
  exit("Error connecting to database!");
}

我得到的错误是:

警告:mysqli_num_rows() 期望参数 1 为 mysqli_result,布尔值在第 58 行的 C:\xampp\htdocs\Dream Pizza\add_order.php 中给出

连接数据库时出错!

【问题讨论】:

  • 使用mysqli_error() 获得更好的错误信息。 -> php.net/manual/en/mysqli.error.php
  • 您需要从 $dbserv="localhost:3306"; 中删除端口 从 PHP 文档 "mysqli::__construct ([ string $host 参数 "host ..." Can be either a host name or an IP address." 看起来不像手册说可以将端口添加到主机字符串. -> php.net/manual/en/mysqli.construct.php 除了在 mysqi 构造函数中还有一个单独的端口参数。

标签: php mysql database mysqli


【解决方案1】:

来自documentation for the get_result() function(强调我的):

成功的 SELECT 查询返回结果集,其他 DML 查询返回 FALSE 或失败。

您正在执行INSERT 查询,因此get_result() 将返回false

相反,您应该使用mysqli_stmt_* 函数(或直接访问属性)从您的$sql_sec 语句中直接获取有关查询结果的信息:

if(mysqli_stmt_affected_rows($sql_sec)){
// or:
if($sql_sec->affected_rows) {

请注意,您需要检查 affected_rows 属性,而不是 num_rows 属性。原因是num_rows 返回结果集 中的行数。您不是在选择结果集,而是在插入一组新数据。这意味着您实际上对插入的行数感兴趣,它存储在 affected_rows 属性中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 2020-10-24
    • 2012-04-29
    • 2012-11-04
    相关资源
    最近更新 更多