0

我在尝试从 MySQL 切换到 MySQLi 时感到很困惑,我只是在尝试一个非常基本的示例,看看我是否可以让它工作。请原谅使用 .post 而不是 .ajax 并且暂时不返回 JSON 的不良做法,我只是使用一些旧代码来查看是否可以使查询正常工作。

目前,在 index.php 上,我创建了一个新连接:

$connection = new mysqli($host, $username, $password, $database);
if (mysqli_connect_errno()) die(mysqli_connect_error());

然后,在我的 scripts.js 文件上使用 jquery,我收集我的变量并将它们发送到一个处理文件:

    $("#toolbarTitle-Login").click(function() {
        var loginEmail = $("#toolbarTextbox-Email").val();
        var loginPassword = $("#toolbarTextbox-Password").val();
        if (loginEmail != "") {
            $.post(
                'ajax/loginProcess.php', 
                {
                    'email': loginEmail,
                    'password': loginPassword
                },
                function (response) {
                    $(".testingBox").html(response);
                }
            );
        }
    });

现在,在我的处理文件 loginProcess.php 中,我进行了一个查询:

$passwordMd5 = md5($_POST["password"]);
$email = $connection->$_POST["email"];
$password = $connection->$passwordM5;

$sql = $connection->prepare("SELECT clientId, studentEmail, parentEmail, school
                                                    FROM clients
                                                    WHERE (studentEmail = ? AND studentPassword = ?) OR (parentEmail = ? AND parentPassword = ?);");

$statement->bind_param("ssss",$email,$password,$email,$password);

$row["id"] = 0;
$row["studentEmail"] = '';
$row["parentEmail"] = '';
$row["school"] = '';

$statement->bind_result($row["id"], $row["studentEmail"], $row["parentEmail"], $row["school"]);
$statement->execute();

while($statement->fetch()) {
    print  $row["id"].' '.$row["studentEmail"].' '.$row["parentEmail"].' '.$row["school"].'<br />';
}

这会导致“致命错误:在“/home/guysandd/public_html/test/v3/ajax/loginProcess.php on line 8”中的非对象上调用成员函数 prepare()。我认为这意味着它是不认识我的连接,但我不确定如何让它做到这一点。另外,我想知道 mysqli_real_escape_string 是否是必要的,因为参数是分开的。

编辑:澄清一下,我正在处理的网站有两个登录帐户:父母和学生。查询返回信息后,我检查他们是家长还是学生,这会改变内容。

4

1 回答 1

1

你需要写这部分

$connection = new mysqli($host, $username, $password, $database);
if (mysqli_connect_errno()) die(mysqli_connect_error());

再次进入loginProcess.php,因为没有活动的数据库连接

编辑

在这种情况下,您将不得不创建一个持久连接。来自 PHP 手册

与 mysql 扩展不同,mysqli 没有提供单独的函数来打开持久连接。要打开持久连接,您必须p:在连接时添加主机名。

于 2012-11-17T00:09:11.667 回答