【发布时间】:2020-06-17 12:12:47
【问题描述】:
我正在使用 PHP 和 MySQL 构建一个注册和登录系统。我有 2 个项目,旧的可以完美运行,但新的不行。
在我的旧项目中,我在 oldlogin.php 和 oldregister.php 中有一个 olddbc.php 文件。在这两个文件中,我只需要使用 $con 变量并访问数据库并做一些事情。
<?php
$DATABASE_HOST = 'localhost';
$DATABASE_USER = 'root';
$DATABASE_PASS = '';
$DATABASE_NAME = 'customer_db';
$con = mysqli_connect($DATABASE_HOST, $DATABASE_USER, $DATABASE_PASS, $DATABASE_NAME);
if (mysqli_connect_errno())
{
$err_msg = "Failed to connect to MySQL:".mysqli_connect_error();
}
但在我的新项目中,它并没有像这样工作,我不知道为什么。我无法使用 newdbc.php 文件中的 $con 变量。我尝试了不同的方法,最后使用了一个包含方法的类数据库,它应该得到 $con.
class Database{
function dbcon (){
$DATABASE_HOST = 'localhost';
$DATABASE_USER = 'root';
$DATABASE_PASS = '';
$DATABASE_NAME = 'users_db';
$con;
if($con === NULL){
$con = mysqli_connect($DATABASE_HOST, $DATABASE_USER, $DATABASE_PASS, $DATABASE_NAME);
if (mysqli_connect_errno())
{
$err_msg = "Failed to connect to MySQL:".mysqli_connect_error();
return $err_msg;
}
}
return $con;
}
}
在我的 newregister.php 中,我使用它来获取连接并且它可以工作。我可以注册一个新用户并重定向到帐户页面..
$conn = new Database();
$con = $conn->dbcon();
但在我的 newlogin.php 中,连接不起作用。如果我尝试使用 $con 只是像我在旧项目中那样需要 dbc.php,变量 $stmt 为空,它会重定向并显示错误消息。如果我尝试在 newregister.php 中获取连接,它不会重定向,它会停留在 login.php 上并显示一个空白页面。
else{
$conn = new Database();
$con = $conn->dbcon();
$sql = "SELECT * FROM user WHERE username = ?";
$stmt = mysqli_stmt_init($con);
if(!mysqli_stmt_prepare($stmt, $sql)){
$err_msg = "Database Problems";
header("Location: ../index.php?logError=".$err_msg);
exit();
}
else {
//bind params and execute blah blah
}
我不明白为什么$con 在我的旧项目中工作如此简单,而新项目却如此费力。是同一个版本的PHP。
如果我以旧方式尝试,我会得到这个:
PHP注意事项:未定义变量:第16行login.php中的con,引用者:http://localhost/index.php?logError=Database%20Problem
PHP 警告:mysqli_stmt_init() 期望参数 1 为 mysqli,在第 16 行的 login.php 中给出 null,引用:ht-tp://localhost/index.php
PHP 警告:mysqli_stmt_prepare() 期望参数 1 为 mysqli_stmt,在第 17 行给定 inlogin.php 为 null,引用:ht-tp://localhost/index.php
如果我尝试新方法,什么都不会发生。
【问题讨论】:
-
你从服务器得到什么错误信息?服务器日志说明了什么?
-
也许记录msqli_error 所以确切的数据库问题更明显。
-
您是否尝试过检查
$con设置为哪个值? -
我编辑了原帖,有来自apache的错误日志。