首页 > 解决方案 > 如果我从 anathor 文件中包含 con,在哪里使 con 变量成为全局变量

问题描述

我在 anathor php 中包含了连接资源文件。我正在制作一个小网站。但是当我使用 $run_cats = mysqli_query($con,$get_cats); 错误来了 mysqli_query 希望参数 1 是 mysqli ,给定 null

我试图将 global $con 放在使用的地方并靠近 con = mysqli_connect 但没有一个有效

这是包含/db.php

   <?php 
 $con = mysqli_connect("localhost","root","","ecommerce",3307);
 ?>

IN 插入产品页面,包括顶部

<!DOCTYPE>
<? php
include("includes/db.php");
?>

<select name="product_cat">
<option>Select a Category</option>
<?php
global $con;
$get_cats = "select * from categories";
$run_cats = mysqli_query($con,$get_cats);
                    while($row_cats=mysqli_fetch_array($run_cats)){
 $cat_id = $row_cats['cat_id'];
$cat_title = $row_cats['cat_title'];
echo " <option value='$cat_id'>$cat_title</option>  ";
}
?>

</select>

这里 $con 即将到来 null 。

我希望连接会来这里,但是 null 来了,con 范围存在一些问题。如何处理。

标签: php

解决方案


您的 include/db.php 文件

在您的示例中使用 $con 的方式中, $con 在其余代码的范围内。所以可能会发生其他事情。

您应该测试 $conn 是什么。即在继续之前检查连接是否成功。

就像是...

<?php 
$con = mysqli_connect("localhost","root","","ecommerce",3307);
if (!$con)
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
?>

它可能在包含上失败并且没有设置 $conn

您的示例代码中文件的位置是什么?

如果是包含失败的情况,那么它在哪里很重要,相对于您的包含路径/文件名。

启用错误报告

将这两行添加到它总是要运行的地方。这将确保您会看到任何错误。还有其他方法可以做到这一点,但我会留给你研究。

error_reporting(E_ALL);
ini_set('display_errors', 1);

所以假设你的 db.php 总是被包括在内,你可以有

<?php 
// These Two Lines ONLY for Debugging.
// Remove when using in production.
error_reporting(E_ALL);
ini_set('display_errors', 1);

$con = mysqli_connect("localhost","root","","ecommerce",3307);
if (!$con)
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
?>

$con 的范围

在您的示例代码中, $con 在同一范围内,因此可以看到它是否设置正确。

在函数的情况下,它不会,所以你可以在函数中将 $con 声明为全局,或者你可以将它作为参数传递。这是你的选择。

更新。

我已经测试了你的代码并且“它对我有用”,所以你选择了错误的原因来解释你的代码为什么不工作。这绝对不是范围界定问题,因此请尝试其他建议,看看是否能帮助您取得成功。

您确定您的连接/数据库详细信息正确吗?

您确定您的连接详细信息正确吗?可能就这么简单。在您的 db.php 中添加的检查会立即告诉您原因是什么。


推荐阅读