错误提示如下:
 mysqli_query() expects parameter 1 to be mysqli, null given in D:\xampp\htdocs\
我在conn.php文件的代码如下:
<?php
$hostname = "localhost";
$db = "dbtest";
$db_username = "root";
$db_password = "kkk123";
$conn = mysqli_connect($hostname, $db_username, $db_password,$db); 
mysqli_query($conn,"set names utf8");
?>
fun.php文件代码如下
function showclassname($classid)
{
if ($classid>0)
{


//不懂为什么要加上这一句?文件不是已经全部包含了吗?
//include("conn.php");

$sql="select classname from newsclass where classid=" .$classid;
$query=mysqli_query($conn,$sql);
$row=mysqli_fetch_array($query);
$showclassname=trim($row["classname"]);
return $showclassname;
}
}
测试文件包含以上两个文件,文件没有任何错误,运行提示的错误是fun.php文件有错误的部分(蓝色标记部分为被定义),而当引入文件(include("conn.php"))后就可以了,可以测试文件里不都包含了吗,为什么在定义的function里还要再次引入$conn变量呢?是不是conn.php里的$conn不能被function引用呢?该怎么修改才可以?总不能每次都再引用一次吧?这不是重复了吗?

解决方案 »

  1.   

    expects parameter 1 to be mysqli, null given
    是说 mysqli_query 函数的第一个参数应该是 mysqli 连接字,而现在是空值使用外部文件中的资源,需要先将外部文件引入。这个你是知道的剩下来的就是变量的作用域了
    你在 conn.php 创建的变量 $conn
    对于 函数 showclassname 而言是外部变量(include("conn.php");是在函数外执行的)
    需要声明为全局变量(global $conn;)后才能在函数里使用。当然也可以在函数内 include("conn.php");,但如果 conn.php 中还定义了函数、类、常量 的话就要出重复定义的错误了
      

  2.   

    针对我这个简单的范例:
    一个测试文件包含conn.php和func.php两个文件。其中
    conn.php定义$conn连接。
    func.php定义函数,使用$query=mysqli_query($conn,$sql);
    运行测试文件报错!位置在func.php文件里,指出$conn这个参数没被定义。如果定义全局变量应该在哪个文件里,在测试文件头加入global $conn;还是不行。就像你说的那样,在函数里面再引入conn.php不可取,有没有一个通用的办法?麻烦你再详细回答一下可以吗?
      

  3.   

    fun.php文件
    <?php
    function showclassname($classid)
    {
      global $conn;
      if ($classid>0)
      {
      

  4.   

    谢谢你,这样可以。在conn.php和测试文件里边加入global $conn都不可以,没想到需要在fun.php里加入,真好,就是不知道为啥在fun.php里加入全局变量,在conn.php里就不可以呢?