wir*_*ark 8 php mysql database mysqli function
我有一个小问题从mysql_*传递到mysqli面向对象.
我的index.php文件的结构类似于包含两个文件:
include('connect.php');
include('function.php');
Run Code Online (Sandbox Code Playgroud)
connect.php文件包含:
<?php
$mysqli = new mysqli("localhost", "root", "test", "test");
if (mysqli_connect_errno($mysqli)) {
printf("Connection failed: %s\n", mysqli_connect_error());
exit();
}
?>
Run Code Online (Sandbox Code Playgroud)
在function.php文件中有一个名为showPage的函数,该函数不带参数但使用$ mysqli连接,在......之类的行中
$result = $mysqli -> query("SELECT * FROM $table ORDER BY ID DESC"); // Seleziono tutto il contenuto della tabella
Run Code Online (Sandbox Code Playgroud)
如果不传递$ mysqli变量的函数,我无法管理它,但是当我使用mysql_*不推荐的函数时,这不是必需的!
我能理解为什么,解决这个问题的最佳方法是什么?
用户定义的函数在PHP中有自己的变量范围.您需要$mysqli
将函数作为参数传递给函数,或者启动函数global $mysqli
.
这个确切的问题在Variable scope页面上作为示例给出:
但是,在用户定义的函数中,引入了本地函数范围.函数内使用的任何变量默认限制为本地函数范围.例如,此脚本不会生成任何输出,因为echo语句引用$ a变量的本地版本,并且尚未在此范围内分配值.您可能会注意到这与C语言略有不同,因为C中的全局变量可自动用于函数,除非被本地定义特别覆盖.这可能会导致一些问题,因为人们可能会无意中更改全局变量.在PHP中,如果要在该函数中使用全局变量,则必须在函数内将其声明为全局变量.
<?php
$a = 1; /* global scope */
function test()
{
echo $a; /* reference to local scope variable */
}
test();
?>
Run Code Online (Sandbox Code Playgroud)