PHP登录系统在本地工作,但不';不要在Hostgator PHP7.2上工作
PHP登录系统在本地上工作,但在Hostgator PHP7.1上不工作。我的本地版本是PHP7.2 我已经在本地机器上建立了一个完整的工作门户。我可以在我的本地机器上清除积垢。我一把它放到服务器上,登录系统就不工作了。我仍然可以在数据库中填充用户信息时注册新用户,因此这不是数据库配置问题。我发现以下错误: 警告:mysqli_stmt_bind_param():变量的数量与..中准备好的语句中的参数数量不匹配 致命错误:未捕获错误:在…中调用未定义的函数mysqli\u stmt\u get\u result() 我花了5个小时试图弄明白为什么它在Hostgator服务器上不能工作,但在我的本地服务器上可以工作 这是我的密码:PHP登录系统在本地工作,但不';不要在Hostgator PHP7.2上工作,php,mysqli,Php,Mysqli,PHP登录系统在本地上工作,但在Hostgator PHP7.1上不工作。我的本地版本是PHP7.2 我已经在本地机器上建立了一个完整的工作门户。我可以在我的本地机器上清除积垢。我一把它放到服务器上,登录系统就不工作了。我仍然可以在数据库中填充用户信息时注册新用户,因此这不是数据库配置问题。我发现以下错误: 警告:mysqli_stmt_bind_param():变量的数量与..中准备好的语句中的参数数量不匹配 致命错误:未捕获错误:在…中调用未定义的函数mysqli\u stmt\u get\
if(isset($_POST['loginSubmit'])){
//include connection configs
require '../../db_configs.php';
$email = mysqli_real_escape_string($conn, $_POST['email']);
$password = mysqli_real_escape_string($conn, $_POST['password']);
if(empty($email || $password )){
header("Location: ../../../portalSignIn.php?signin=fieldsempty");
exit();
}
else
{
//user email query
$sqlEmail = "SELECT * FROM users WHERE email='$email'";
$emailResult = mysqli_query($conn, $sqlEmail);
$stmt = mysqli_stmt_init($conn);
//SQL Error
if(!mysqli_stmt_prepare($stmt, $sqlEmail)){
header("Location: ../../../portalSignIn.php?signin=SQL_FAILED");
exit();
}
if(mysqli_num_rows($emailResult) == 0){
//email doesn't exist
header("Location: ../../../portalSignIn.php?signin=incorrectemail");
exit();
}
else
{
//bind data if email exists
mysqli_stmt_bind_param($stmt, "s", $email);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
if($row = mysqli_fetch_assoc($result)){....
它在这一点上被打破了-->mysqli_stmt_bind_param($stmt,“s”,$email)代码>
我已经调查过了,Hostagtor没有这些设置。我在注册页面上成功地使用了mysqli\u stmt\u bind\u param()
。您的代码中有很多错误。让我向你解释其中的一些
mysqli\u real\u escape\u string()
对变量进行转义。只是完全不要使用这个函数empty($email | |$password)
将检查布尔值。这没有多大意义。删除empty
调用并检查否定。如果既不是$email
也不是$password
,则其中一个为空mysqli\u查询
。您将准备一条语句,因此不要调用此函数。您还需要参数化SQL。使用?
作为值的占位符李>
mysqli\u num\u rows
在此位置将抛出错误。你根本不需要这个函数。如果要使用它,需要将get\u result()
$record
将为空李>
和往常一样,不要忘记启用mysqli错误报告。请参见我遇到的问题是,Hostgator没有可供共享主机用户使用的mysqlnd,而只有那些具有VPS或专用服务器的用户: 可以为其他用户启用该功能,并且可以按照本教程执行说明:
这是一堂学习课,尤其是在了解你的网络主机方面 你的SQL语句没有绑定参数。这段代码有太多问题…我从一个在线教程中学习,因为后端对我来说是新的。另外,我想知道为什么它在本地计算机上工作正常,但在服务器上安装时却不正常。而且,看起来你的托管服务器可能配置错误<代码>调用未定义的函数mysqli\u stmt\u get\u result听起来好像您关闭了mysqlnd。感谢您的代码审阅,但本线程的重点是为什么它可以在我的本地计算机上运行,而不能在Hostgator服务器上运行。如果它可以在您的本地计算机上运行,我会感到惊讶。你可能很幸运。然而,我无法想象它是如何工作的。它会抛出一堆错误,然后痛苦地死去。我把你的代码放到我的代码中,它在我的本地服务器上工作。然而,一旦我将其部署到Hostgator,我现在就得到了“未捕获的错误:调用未定义的方法mysqli_stmt::get_result()”。Hostgator没有像此网站示例中那样为我设置勾选框:
if (isset($_POST['loginSubmit'])) {
//include connection configs
require '../../db_configs.php';
$email = $_POST['email'];
$password = $_POST['password'];
if (!$email || !$password) {
header("Location: ../../../portalSignIn.php?signin=fieldsempty");
exit();
} else {
//user email query
$sqlEmail = "SELECT * FROM users WHERE email=?";
$stmt = $con->prepare($sqlEmail);
$stmt->bind_param('s', $email);
$stmt->execute();
$result = $stmt->get_result();
$record = $result->fetch_assoc();
if (!$record) {
//email doesn't exist
header("Location: ../../../portalSignIn.php?signin=incorrectemail");
exit();
} else {
// handle your data here
}
}
}