1

我正在看 phpacademy.org 的 Alex 几年前的一些教程,他使用 mysql 而不是 mysqli 我知道 mysqli 更好,应该改用,但似乎无法弄清楚如何使这段代码适用于所有人mysqli 代替。有人可以转换它吗?

<?php
$connect = mysql_connect('localhost', 'root', 'pass') or die (mysqli_error());
mysql_select_db('jquery');

if (isset($_POST['username'])) {
    $username = mysql_real_escape_string($_POST['username']);
    if (!empty($username)) {
        $username_query = mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username`='$username'");
        $username_result = mysql_result($username_query, 0);

        if ($username_result == 0) {
            echo 'Username is available!';
        } else if ($username_result == 1) {
            echo 'Sorry, that username is taken.';
        }
    }
}
?>

我试图做的是这个..但mysqli_result一直给我错误:

<?php
$connect = mysqli_connect('localhost', 'root', 'pass', 'jquery') or die (mysqli_error());

if (isset($_POST['username'])) {
    $username = mysqli_real_escape_string($connect, $_POST['username']);
    if (!empty($username)) {
        $username_query = mysqli_query($connect, "SELECT COUNT(`user_id`) FROM `users` WHERE `username`='$username'");
        $username_result = mysqli_result($username_query, 0);

        if ($username_result == 0) {
            echo 'Username is available!';
        } else if ($username_result == 1) {
            echo 'Sorry, that username is taken.';
        }
    }
}
?>

所以我一直得到的唯一错误是mysqli_result说:

致命错误:在第 8 行的 \php\username.php 中调用未定义函数 mysqli_result()

我查找了mysqli_result在线的用法,并没有找到很多结果来帮助我解决这个问题,希望这里有人可以帮助我。

4

2 回答 2

2

当您使用面向对象的风格时,您属于此类$username_query;是一个类而不是一个函数。mysqli_resultmysqli_result

要从结果集中获取一行,您可以执行以下操作(例如):

$username_result = mysqli_fetch_array($username_query);

并且您应该使用 mysqli(或 PDO)而不是mysql_*函数的原因不仅仅是后者已被弃用:PDO(和 mysqli)提供准备语句,并且比转义函数提供更好的防止 sql 注入的保护。

于 2013-04-10T00:48:10.973 回答
1

首先确保表中的用户unique名列不会有重复的用户名,因此$count正好是 0 或 1,然后试试这个:

if (isset($_POST['username']) && $_POST['username'] != '') {

    $connect = new mysqli('localhost', 'root', 'pass', 'jquery') or die (mysqli_error());
    $username       = $_POST['username'];
    $query          = "SELECT COUNT(`user_id`) AS count FROM `users` WHERE `username`=?";
    $username_query = $connect->prepare($query);
    $username_query->bind_param('s', $username);
    $username_query->execute();
    $username_query->bind_result($count);
    $username_query->fetch();
    $username_query->close();
    $connect->close();

    if ($count == 0) {
        echo 'Username is available!';
    } else if ($count == 1) {
        echo 'Sorry, that username is taken.';
    }
}
于 2013-04-10T00:56:26.953 回答