将mysql脚本转换为mysqli


Converting script from mysql to mysqli

我正试图将以下脚本从mysql转换为mysqli,但我有问题。

这是使用mysql的原始脚本:

    //database connection
    $dbname = 'nursery';
    $link = mysql_connect("localhost","root","") or die("Couldn't make connection.");
    $db = mysql_select_db($dbname, $link) or die("Couldn't select database");
    ?>
    <div style="width:728px;margin:auto;">
        <div id='cssmenu'>
            <ul>
    <?php
    function query($parentid) { //function to run a query
        $query = mysql_query ( "SELECT * FROM menu WHERE parentid=$parentid" );
        return $query;
    }
    function has_child($query) { //This function checks if the menus has childs or not
        $rows = mysql_num_rows ( $query );
        if ($rows > 0) {
            return true;
        } else {
            return false;
        }
    }
    function fetch_menu($query) {
        while ( $result = mysql_fetch_array ( $query ) ) {
            $menu_id = $result ['id'];
            $title = $result ['title'];
            $url = $result ['url'];
            echo "<li  class='has-sub '><a href='{$url}'><span>{$title}</span></a>";
            if (has_child ( query ( $menu_id ) )) {
                echo "<ul>";
                fetch_menu ( query ( $menu_id ) );
                echo "</ul>";
            }
            echo "</li>";
        }
    }
    fetch_menu (query(0)); //call this function with 0 parent id
    ?>
            </ul>
        </div>
        </div>

所以我试图将其转换为mysqli,我的网站的其余部分使用,并得到了这一点:

    <?php
    require("../login/common.php");
    //database connection;
    include '../connect.php';
    ?>
    <div style="width:728px;margin:auto;">
        <div id='cssmenu'>
            <ul>
    <?php
    function query($parentid) { //function to run a query
        $query = mysqli_query ($db, "SELECT * FROM menu WHERE parentid=$parentid" );
        return $query;
    }
    function has_child($query) { //This function checks if the menus has childs or not
        $rows = mysqli_num_rows ( $query );
        if ($rows > 0) {
            return true;
        } else {
            return false;
        }
    }
    function fetch_menu($query) {
        while ( $result = mysqli_fetch_array ( $query ) ) {
            $menu_id = $result ['id'];
            $title = $result ['title'];
            $url = $result ['url'];
            echo "<li  class='has-sub '><a href='{$url}'><span>{$title}</span></a>";
            if (has_child ( query ( $menu_id ) )) {
                echo "<ul>";
                fetch_menu ( query ( $menu_id ) );
                echo "</ul>";
            }
            echo "</li>";
        }
    }
    fetch_menu (query(0)); //call this function with 0 parent id
    ?>
            </ul>
        </div>
        </div>

问题是我得到了各种各样的错误,我不完全确定为什么,我知道db错误可能是下降到$db没有被传递到函数,但即使我写函数fetch_menu($query,$db){我仍然得到相同的错误?

Notice: Undefined variable: db in         C:'easyphpserver'data'localweb'projects'nursery'menu'menu3.php on line 147
  Warning: mysqli_query() expects parameter 1 to be mysqli, null given in    C:'easyphpserver'data'localweb'projects'nursery'menu'menu3.php on line 147
   Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given in       C:'easyphpserver'data'localweb'projects'nursery'menu'menu3.php on line 159

connect.php的内容为:

 <?php
$db = new mysqli('localhost', 'root', '', 'nursery');
$db->set_charset('utf8mb4');  
  if($db->connect_errno > 0){
die('Unable to connect to database [' . $db->connect_error . ']');
}  
 ?>

pass $db to query()

function query($parentid, $db) {
    $query = mysqli_query ($db, "SELECT * FROM menu WHERE parentid=$parentid" );
    return $query;
}

好的,所以这个解决方案似乎是有效的,通过把db连接在函数内,事情是,如果我包括$db在函数中键入function query($parentid,$db) {这不起作用并导致错误,但如果我将db连接放入函数中,它就会工作.....非常奇怪。

    <?php
    //error_reporting(0);
    require("../login/common.php");
    //database connection;
    include '../connect.php';
    ?>
    <div style="width:728px;margin:auto;">
        <div id='cssmenu'>
            <ul>
    <?php
    function query($parentid) {
        $db = new mysqli('localhost', 'root', '', 'nursery');
    $db->set_charset('utf8mb4');  
    if($db->connect_errno > 0){
        die('Unable to connect to database [' . $db->connect_error . ']');
    }
         //function to run a query
        $query = mysqli_query ($db, "SELECT * FROM menu WHERE parentid=$parentid" );
        return $query;
    }
    function has_child($query) { //This function checks if the menus has childs or not
        $rows = mysqli_num_rows ( $query );
        if ($rows > 0) {
            return true;
        } else {
            return false;
        }
    }
    function fetch_menu($query) {
        while ( $result = mysqli_fetch_array ( $query ) ) {
            $menu_id = $result ['id'];
            $title = $result ['title'];
            $url = $result ['url'];
            echo "<li  class='has-sub '><a href='{$url}'><span>{$title}</span></a>";
            if (has_child ( query ( $menu_id ) )) {
                echo "<ul>";
                fetch_menu ( query ( $menu_id ) );
                echo "</ul>";
            }
            echo "</li>";
        }
    }
    fetch_menu (query(0)); //call this function with 0 parent id
    ?>
            </ul>
        </div>
        </div>