【问题标题】:mysqli and AJAXmysqli 和 AJAX
【发布时间】:2023-03-16 19:44:01
【问题描述】:

我在尝试从 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 第 8 行”中的非对象上调用成员函数 prepare()。我认为这意味着它无法识别我的连接,但我不确定如何让它做到这一点。另外,我想知道 mysqli_real_escape_string 是否必要,因为参数是分开的。

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

【问题讨论】:

    标签: php jquery ajax mysqli


    【解决方案1】:

    这部分你需要写

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

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

    编辑

    在这种情况下,您将不得不创建一个持久连接。 From PHP Manual

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

    【讨论】:

    • 这个问题是我会不断地为每个查询打开和关闭我的连接(有很多 AJAX)。有没有办法一次打开它,并让所有文件都打开它?当然,我可以保持连接打开并继续进行多个查询。建立新连接需要很长时间,我宁愿不必为每个查询都这样做。有人告诉我,只要连接不是持久的,它就会在最后自行终止。
    • 好吧,我会将此答案标记为正确,因为它已经 4 小时了,我没有收到任何其他回复,并且它确实可以为每个查询创建一个新连接。但是,我知道有更好的方法可以做到这一点,所以如果有更好的方法出现,我会改变这个答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    相关资源
    最近更新 更多