当前位置: 首页 > 知识库问答 >
问题:

mysqli_num_rows返回false,但数据被添加到数据库[重复]

陈欣荣
2023-03-14

我得到一个错误

代码如下:

<?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中给出

连接到数据库时出错!


共有1个答案

龚弘业
2023-03-14

get_result()函数的留档(强调我的):

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

您正在执行一个INSERT查询,因此get\u result()将返回false

相反,您应该使用mysqli\u stmt.*函数(或直接访问属性)直接从$sql\u sec语句中获取查询结果的相关信息:

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

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

 类似资料:
  • 当我在php中使用MSSQL读取一个包含很长内容的字段时,我得到一个错误 警告:mssql_query()[function.mssql查询]: Unicode仅排序规则中的Unicode数据或ntext数据不能使用DB-库(如ISQL)或ODBC版本3.7或更早版本发送到客户端 我在网上搜索并找到了解决这个问题的方法,发现我需要转换结果以获得可读文本。 然而,我遇到的另一个问题是,文本数据在40

  • 我是< code>sqlite数据库的新手,在我的项目中,我需要在创建数据库后添加数据。我尝试了这种方式,这是我的代码。 公共类主要活动扩展活动 { } 我创建了另一个类来打开sqlite数据库。 公共类MySqlHelper扩展SQLiteOpenHelper{ 公共字符串getBird(int id){ 它给我异常 帮助我避免这种情况,并在创建数据库后立即插入数据。

  • 问题内容: 我是使用$ pdo语句的新手,所以可能很简单,我尚未在php.net上阅读。查询数据库时收到重复的结果。 结果: 查询非常简单: 问题是,在命名的键(,,,)确实存在,数字键没有。查询如何返回这些?以及如何防止他们被退回? 问题答案: 它不是重复的,只是您所使用的当前。要仅获取关联密钥,您需要这样指定:默认情况下,两者都获取。 像这样使用: fetchAll文档 fetch文档

  • 我无法使此表单成功地将数据提交到数据库。我已经验证了数据库/表是否存在(模式如下所示),并且出于某种原因,它没有将其插入数据库。当我尝试提交示例数据时,它不会改变页面,只是坐在那里。发生了什么事? 模式: 食物(PID INT NOT NULL自动递增,主键(PID),名称VARCHAR(20),类型VARCHAR(9),NumCals INT,健康BOOL,注释文本)

  • 我有一个数据框在熊猫如下,这是存储团队赢得的名称和体育场的名称,它赢了如下 现在,我已经在上面的数据框上与group by进行了一些计算,以找到每支球队的数量以及在体育场赢得的比赛,如下所示: 现在,我想将这些计数值添加回我的数据帧。 我面临多个分组列的问题。 任何帮助。

  • 我试图在用户ID下添加新的用户数据,但它将旧数据替换为新数据,并添加另一个“users”和“user\u account\u settings”。 这是我的实时数据库:在此处输入图像描述 我的实时数据库必须是这样的:添加新的用户数据而不将旧数据替换为新数据,也不添加“用户”和“user_account_settings”。 这就是我想要的数据库结构示例:在此处输入图像描述 这是用于添加新用户的代码