我正试图将以下脚本从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>