Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysqli_free_result()要求参数1为mysqli_result,在_Php_Mysql_Mysqli_Sql Insert - Fatal编程技术网

Php mysqli_free_result()要求参数1为mysqli_result,在

Php mysqli_free_result()要求参数1为mysqli_result,在,php,mysql,mysqli,sql-insert,Php,Mysql,Mysqli,Sql Insert,我刚刚将一个站点从一个域迁移到另一个域(和另一个主机)。我确保所有链接都被替换并导出/导入我的数据库。迁移似乎起了作用,但由于某种原因,我在新域上遇到了一个错误,而我在旧域上没有遇到这个错误(据我所知,代码是相同的) 我的错误是:“警告:mysqli_free_result()期望参数1是mysqli_result,第84行的路径中给出了null”。我查看了解决此错误的其他StackOverflow问题,但尚未找到解决方案 这是我的代码: <?php session_start(); /

我刚刚将一个站点从一个域迁移到另一个域(和另一个主机)。我确保所有链接都被替换并导出/导入我的数据库。迁移似乎起了作用,但由于某种原因,我在新域上遇到了一个错误,而我在旧域上没有遇到这个错误(据我所知,代码是相同的)

我的错误是:“警告:mysqli_free_result()期望参数1是mysqli_result,第84行的路径中给出了null”。我查看了解决此错误的其他StackOverflow问题,但尚未找到解决方案

这是我的代码:

<?php
session_start();

// 1. Create a database connection
$dbhost = 
$dbuser = 
$dbpass = 
$dbname = 
$connection = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
// Test if connection occurred.
if(mysqli_connect_errno()) {
  die("Database connection failed: " . 
    mysqli_connect_error() .
    " (" . mysqli_connect_errno() . ")"
    );
}

// 2. Perform database query
if (empty($_SESSION['order'])) {
    $query = "INSERT INTO `orders` (`order_id`) VALUES (NULL)";
    $result = mysqli_query($connection, $query);
    // Test if there was a query error
    if (!$result) {
    die("Database query failed.");
    }
    // 3. Use returned data (if any)
    $order_id_recent = mysqli_insert_id($connection);
    $_SESSION['order'] = $order_id_recent;
}

$size = $_POST["size"];
$paper = $_POST["paper"];
$type = $_POST["type"];
$quantity = $_POST["quantity"];

// 2. Perform database query
$query2 = "SELECT product_id FROM product WHERE product_type = '$type' AND size = '$size' AND paper = '$paper'";
$result2 = mysqli_query($connection, $query2);
// Test if there was a query error
if (!$result2) {
  die("Database query failed.");
}

// 3. Use returned data (if any)
while($row = mysqli_fetch_assoc($result2)) {
    $product_id = $row['product_id'];
}

$order_id = $_SESSION['order'];

// 2. Perform database query
$order_id = $_SESSION['order'];

$query3 = "SELECT * FROM order_item WHERE order_id = '$order_id' AND product_id = '$product_id'";
$result3 = mysqli_query($connection, $query3);
// Test if there was a query error
if (!$result3) {
  die("Database query failed.");
}

while($row = mysqli_fetch_assoc($result3)) { 
    $itemexistrows = mysqli_num_rows($result3);
}

if ($itemexistrows > 0) {
    $query4 = "UPDATE order_item SET quantity = quantity + '$quantity' WHERE product_id = '$product_id' AND order_id = '$order_id'";
    $result4 = mysqli_query($connection, $query4);
    if (!$result4) {
    die("Database query failed.");
    } else {
        echo 'The item has been added to your cart. <a class="text-red" href="viewcart.php">View your cart</a></div>.'; 
    }
} else {
    $query5 = "INSERT INTO `order_item`(`order_item_id`, `product_id`, `quantity`,`order_id`) VALUES (NULL,'$product_id','$quantity','$order_id')";
    $result5 = mysqli_query($connection, $query5);
    if (!$result5) {
    die("Database query failed.");
    } else {
        echo 'The item has been added to your cart. <a class="text-red" href="viewcart.php">View your cart</a></div>.'; 
    }
}

// 4. Release returned data
mysqli_free_result($result);

// 5. Close database connection
mysqli_close($connection);
?>

我怀疑
$\u SESSION['order']
不是空的,因此$result没有设置,因为它似乎没有在同一if语句中寻址

以下几点几乎肯定会解决这个问题

 if(isset($result) && $result!=null){
     // 4. Release returned data
     mysqli_free_result($result);
 }
或者,正如评论中所建议的,可能更好:

 if(isset($result) && is_resource($result)){
     // 4. Release returned data
     mysqli_free_result($result);
 }

你能按原样显示代码吗?
//4.
位于代码中的何处?谢谢你分居,但这会让你更难帮助嘿@Martin,谢谢你的及时回复!最初我把剩下的代码删掉了,因为它真的很难看和凌乱(很久以前写的),但是我编辑了我的文章。谢谢(编辑:看起来我也没有尝试释放其他查询的结果。总体而言,可能还有很多方法可以改进此代码,但我目前只是希望解决此问题。)如果您的代码受到sql注入的影响,我建议您使用预先准备好的语句来敏感您收到的输入。同意,尽管我会选择
if(isset($result)和&is_resource($result)){}
为什么?只要使用if(empty())哇,这确实很有意义。谢谢@Matthew Brown(还有Martin,但我只能链接一个用户)。我现在就去试试,我会回来报到的!这很管用,伙计们!非常感谢!让我开心!我现在觉得自己真的很愚蠢,因为回顾过去(当然)是一个非常明显的错误。越简单越好。empty在一次调用中检查所有基本项。