【问题标题】:PHP7 - MySQLI Error handling issues after moving site to a new serverPHP7 - 将站点移动到新服务器后的 MySQLI 错误处理问题
【发布时间】:2017-11-26 17:22:47
【问题描述】:

在一些人的帮助下,我一直在为我的工作网站建立一个在线目录,今天我将它从开发服务器转移到生产服务器,以便其他几个人可以开始为我测试东西而且我似乎对菜单查询有疑问。我收到以下错误

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result,
boolean given in /websites/store/includes/menu.php 
on line 15

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result,
boolean given in /websites/store/includes/menu.php on line 34

Warning: Invalid argument supplied for foreach() 
in /websites/store/includes/menu.php on line 34

我花了一整天的时间试图弄清楚这里发生了什么,代码在开发服务器上运行良好,但在生产服务器上却抛出错误

谁能向我解释发生了什么或如何解决它

这是页面的代码

<?php
// Category Listing From Database
// Open MySql Database Connection
    include ('sqlopen.php');

// SQL Query for Category Listing
$sql = mysqli_query($conn, "    SELECT CategoryName, SubcategoryName, SubcategoryID 
                                FROM Products GROUP BY SubcategoryID ORDER BY CategoryName");



// Create Array from Data

$menu = array();
while ($row = mysqli_fetch_assoc($sql)) {
    // Creates First Level Array Items For Parent IDs 
    if (!in_array($row['CategoryName'], $menu['CategoryName'])) {
            $menu['CategoryName'][] = $row['CategoryName'];
            }
    if (!empty($row['SubcategoryName']))
                // Creates Second Level Array for Child IDs
                $menu['SubcategoryName'][$row['CategoryName']][] = $row['SubcategoryName'];
                // Creates Third Level Array for Category IDs
                $menu['SubcategoryID'][$row['SubcategoryName']][$row['CategoryName']][] = $row['SubcategoryID'];    
}

 //__________________________________________________________________________________________________________
// Category Menu
?>

<ul id="storenav">
<?php

foreach ($menu['CategoryName'] as $cat) { ?>
    <li><a class="sub" tabindex="1"><?php echo $cat ?></a><ul>

    <?php
    foreach ($menu['SubcategoryName'][$cat] as $subcat) {
        foreach($menu['SubcategoryID'][$subcat][$cat] as $id) ?>
            <li><a href='/store/prodlist.php?subcatid=<?php echo $id ?>'><?php echo $subcat ?></a></li>
    <?php } ?>  
    </ul></li>
<?php } ?>  

</ul>
<?php




//__________________________________________________________________________________________________________
// Open MySql Database Connection
    include ('sqlclose.php');


?>     

【问题讨论】:

  • 您的代码不进行错误检查。你永远不能假设像 mysqli_query() 这样的函数会返回一个结果。当他们不这样做时,您的其余代码将出现您所描述的问题。以前的主机可能刚刚禁用了 display_errors。
  • 好的,谢谢,错误处理是我应该做的我知道:(它可能会让事情变得更容易..所以现在我添加了一点我从数据库中得到这个错误错误代码:1055 . SELECT 列表的表达式#1 不在 GROUP BY 子句中,并且包含非聚合列 CategoryName,该列在功能上不依赖于 GROUP BY 子句中的列;这与 sql_mode=only_full_group_by 不兼容

标签: php mysql mysqli php-7


【解决方案1】:

你假设这条线 $sql = mysqli_query()

返回一个结果集。但是,如果查询失败,它会返回 FALSE,一个布尔值。

这里就是这样。

编写您的代码,如下所示: `

 if($sql = mysqli_query($conn, "your query here")){ 

      $menu = array();
      while($row = ...) {

      }

 }
else {
   echo 'something went wrong'; // and more error handling.
}

?> `

--

为什么查询失败? 部分 group by 在此查询中几乎没有什么关系,因为不存在聚合函数(min()、max()、count() 等) 即便如此:所有列都应在“分组依据”部分中提及

查看 mysqli_error() 让 Mysql 告诉你查询失败的原因。

【讨论】:

    【解决方案2】:

    首先,您没有正确处理错误。更好的说法是,您甚至没有检查它们。试试下面的代码。它将返回对问题所在的更好描述。

    <?php
    /**
     * Created by: PhpStorm.
     * Project: Stackoverflow
     * File name: .php.
     * User: Deathstorm
     * Date: 23-6-2017.
     * Time: 10:14.
     * File Description: ...
     */
    ?>
    <?php
    // Category Listing From Database
    // Open MySql Database Connection
    include ('sqlopen.php');
    
    // SQL Query for Category Listing
    $sql = mysqli_query($conn, "SELECT CategoryName, SubcategoryName, SubcategoryID
    FROM Products GROUP BY SubcategoryID ORDER BY CategoryName");
    
    
    if ($conn->query($sql) === TRUE){
    // Create Array from Data
    
    $menu = array();
    while ($row = mysqli_fetch_assoc($sql)) {
    // Creates First Level Array Items For Parent IDs
    if (!in_array($row['CategoryName'], $menu['CategoryName'])) {
    $menu['CategoryName'][] = $row['CategoryName'];
    }
    if (!empty($row['SubcategoryName']))
    // Creates Second Level Array for Child IDs
    $menu['SubcategoryName'][$row['CategoryName']][] = $row['SubcategoryName'];
    // Creates Third Level Array for Category IDs
    $menu['SubcategoryID'][$row['SubcategoryName']][$row['CategoryName']][] = $row['SubcategoryID'];
    }
    }
    
    else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }
    
    
    //__________________________________________________________________________________________________________
    // Category Menu
    ?>
    
    <ul id="storenav">
        <?php
    
        foreach ($menu['CategoryName'] as $cat) { ?>
            <li><a class="sub" tabindex="1"><?php echo $cat ?></a><ul>
    
                    <?php
                    foreach ($menu['SubcategoryName'][$cat] as $subcat) {
                        foreach($menu['SubcategoryID'][$subcat][$cat] as $id) ?>
                            <li><a href='/store/prodlist.php?subcatid=<?php echo $id ?>'><?php echo $subcat ?></a></li>
                    <?php } ?>
                </ul></li>
        <?php } ?>
    
    </ul>
    <?php
    
    
    
    
    //__________________________________________________________________________________________________________
    // Open MySql Database Connection
    include ('sqlclose.php');
    
    
    ?>
    

    【讨论】:

      猜你喜欢
      • 2017-12-24
      • 2014-04-17
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      • 2020-11-28
      • 2018-03-13
      • 2013-07-01
      • 1970-01-01
      相关资源
      最近更新 更多