2

我正在尽我最大的努力对我的登录脚本进行面向对象并检查我的网站。因此,我创建了一个名为“attempt_login”的函数。此函数通过包含的外部 php 文件提供的“mysqli_connect”函数使用数据库连接,并返回 $link 变量。

但是,当在我的“attempt_login”中达到“mysqli_stmt_prepare”功能时。它总是返回 false,因此 if 语句永远不会运行。

mysql_connect.php

require_once '../conf.php';

$link = mysqli_connect($mysql_server,$mysql_user,$mysql_pass,$mysql_db);

if(mysqli_connect_error())
{
    //Fail
    echo mysqli_connect_error();

}else{
//Success

}

return $link;

来自“attempt_login”的代码失败:

    $link = require_once 'functions/mysql/mysql_connect.php';

print_r($link);

$stmt = mysqli_stmt_init($link);

    echo mysqli_stmt_error($stmt);
    echo mysqli_error();

     //This if statement always fails.
if(mysqli_stmt_prepare($stmt,"SELECT member_salt FROM members WHERE username=?" ) )
{

    mysqli_stmt_bind_param($stmt,'s',$login_details['username']);

    mysqli_stmt_execute($stmt);

    $member_salt = NULL;

    mysqli_stmt_bind_result($stmt,$member_salt);

    mysqli_stmt_close($stmt);

}

调用函数非常简单。

attempt_login($login_details);

我尝试了很多方法来做到这一点,但它似乎只在它不在函数内时才有效。这违背了我试图将其用于功能的目的。如果我将错误输出移到 if 语句之后,它将打印:

没有选择数据库

即使在链接中明确设置了一个。我也可以做一个 print_r($link); 它确实为 mysql 服务器打印了正确的数据。

它对于过程和面向对象的 mysqli 样式也有同样的问题,并且对于“mysqli_prepare”也失败了。

我确实有 mysql 在该站点上工作,但是在函数中运行任何内容的任何尝试都失败了。

我已经搜索了几个小时试图找到答案,但找不到任何东西。我期待着您的回音!提前谢谢了。

~特拉维斯

4

2 回答 2

1

我会说你还没有选择数据库。

要么$mysql_db未设置,../conf.php要么存在拼写错误,要么$mysql_db在 中不可见mysql_connect.php

于 2012-12-30T22:24:04.270 回答
0

您似乎没有传递$stmt给您的函数,我建议您在scopes上阅读此内容。

于 2012-12-30T21:53:39.353 回答