针对 MySQL 的 PHP 用户名验证

标签 php mysql

很多时间,花了,这里是我在:

    $uname_query = mysql_query("SELECT username FROM blog_members WHERE username='".$username."'");         

    if ($uname_query == $username) {
        $error[] = 'Username is already taken';
    }

我正在尝试使用 SQL 查询 $uname_query 来提取表单中输入的 $username,如果存在,则使用 if 语句显示错误(如果存在)。

因为它是现在编码的,所以我没有收到任何错误,但也没有任何功能。

我错过了什么?

最佳答案

你需要使用一个fetch。

$row = mysql_fetch_row($uname_query);
// $row[0] will contain the first column of the first row (username)
if ($row[0] == $username) { }

但是,您应该考虑使用 PDO 或 MySQLi,因为 MySQL api 已被弃用。如果用户提供了 $username,您还应该使用准备好的语句。

在 PDO 中你可以这样做:

$stmt = $pdo->prepare("SELECT username FROM blog_members WHERE username=?");
$stmt->execute(array($username));
// fetchColumn will return the first column of the first row (username)
if ($stmt->fetchColumn() == $username) { }

这通过提供不带 $username 的准备语句并将其绑定(bind)到 execute() 函数中来防止 SQL 注入(inject)。 PDO 最初也需要一些不同的设置,但这里有一个很好的教程:http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

关于针对 MySQL 的 PHP 用户名验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23023270/

相关文章:

php - mysqli 更新不起作用

php - MySQL对单个字段进行多顺序排序

php - 具有动态数组命名的内部数组

php - 以下查询中的错误是什么?

mysql - 如何使 MySQL 中的数据库位于计算机上的另一个驱动器上?

mysql - 如果数据库更新中存在记录,则在 sql 数据库中创建新记录

php - WordPress插件开发: Deliver other page to browser than requested in URL

php - 使用 PHP 编写 if 语句的更好方法是什么

PHP 和正则表达式 : search for word in string

mysql - redis中如何处理 "View count"