【发布时间】:2021-01-28 17:50:21
【问题描述】:
我的项目中有一个核心文件,其中包含我使用的所有 PHP 函数。这一切都是用 PHP5 编写的。 最近我决定学习并迁移到 PHP7。
所以这是我的主要文件内容(简化):
<?php
$db_host='localhost';
$db_user='root';
$db_pass='';
$db_name='migration';
$link = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
if (mysqli_connect_errno()) {
echo mysqli_connect_error();
exit();
}else{
mysqli_query($link, "SET NAMES utf8");
mysqli_query($link, "SET CHARACTER SET utf8" );
}
function dbquery($query) {
$result = mysqli_query($link, $query);
if (!$result) {
echo mysqli_error($link);
return false;
} else {
return $result;
}
}
function dbarray($query) {
$result = mysqli_fetch_assoc($query);
if (!$result) {
echo mysqli_error($link);
return false;
} else {
return $result;
}
}
// Fetch the Site Settings from the database and store them in the $settings variable
$settings = dbarray(dbquery("SELECT * FROM site_settings"));
?>
现在的问题是,当我运行文件时,出现以下错误:
Warning: mysqli_query() expects parameter 1 to be mysqli, null given
Warning: mysqli_error() expects parameter 1 to be mysqli, null given
Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, bool given
Warning: mysqli_error() expects parameter 1 to be mysqli, null given
现在,我在这里做错了什么?
添加
当我启动这个文件时,我在一个单独的函数中有mysqli_connect。
所以连接实际上是这样的:
$link = dbconnect($db_host, $db_user, $db_pass, $db_name);
function dbconnect($db_host, $db_user, $db_pass, $db_name) {
$db_connect = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
if (mysqli_connect_errno()) {
echo mysqli_connect_error();
exit();
}
mysqli_query($db_connect, "SET NAMES utf8");
mysqli_query($db_connect, "SET CHARACTER SET utf8" );
}
但是mysqli_connect 似乎也没有在函数内部工作。
后来,我把代码改成了我在上面写的样子。
非常感谢这里的帮助。
编辑
我还尝试将$link 设为全局变量。但这没有帮助。
【问题讨论】:
-
一定要用mysqli吗?为什么不能切换到 PDO?
-
@Dharman 我一直在使用 PHP5 结构,我不是专业程序员。所以当我决定迁移到 PHP7 时,我认为
mysqli会更容易实现和使用。我不知道 PDO 是如何工作的。 -
我推荐学习 PDO。它从 PHP 5 开始就可用,它更易于使用并提供更多功能。在这里开始学习phpdelusions.net/pdo
-
@Dharman 非常感谢。我一定会看看 PDO 并尝试学习它。但只是为了我自己的信息,你能告诉我我用
mysqli尝试的代码有什么问题吗?我阅读了一些基本指南,所有内容都是根据这些指南编写的。我只是把它们放在我自己的函数中。