【问题标题】:How to check if a data exist in database in PHP? (MULTIPLE)如何在PHP中检查数据是否存在于数据库中? (多)
【发布时间】:2020-06-29 05:39:51
【问题描述】:

我有一个带有 if 语句的注册表:

$query = "SELECT `username` FROM `users` WHERE `username`='$username'";
$query_run = mysql_query($query);

if (mysql_num_rows($query_run)==1) 
{
    echo "Username already exist.";
}

我想做的事情是检查数据库中是否存在“电子邮件”和“昵称”。 我该怎么做?

【问题讨论】:

标签: php mysql database


【解决方案1】:

试试这个,

SELECT `username`, `email`, `nickname`
FROM `users`
WHERE (`username` = '$username' OR
       `email` = '$username' OR
       `nickname` = '$username' )

【讨论】:

  • 我自己解决了... :P 但无论如何:清除代码...谢谢!
  • 为什么*不仅仅是用户名,他/她只想知道用户是否已经存在
【解决方案2】:

你不应该使用简单的 mysql_query

引用php.net

警告 自 PHP 5.5.0 起,此扩展程序已弃用,并将 将来删除。相反,MySQLi 或 PDO_MySQL 扩展 应该使用。另请参阅 MySQL:选择 API 指南和相关常见问题解答 了解更多信息。此功能的替代方案包括: mysqli_query() PDO::query()

尝试使用 PDO 或 mysqli。 这对于防止 mysql 注入至关重要。

http://php.net/manual/en/pdo.prepared-statements.php

这是一个如何使用 PDO 执行此操作的示例

$config['db'] = array(
    'host'          => 'localhost',
    'username'      => 'username',
    'password'      => 'password',
    'dbname'        => 'dbname'
    );



$db = new PDO("mysql:host={$config['db']['host']};dbname={$config['db']['dbname']}",
              $config['db']['username'], $config['db']['password']);


$sql = "SELECT * FROM `users`";
$stmt = $db->prepare($sql);
$stmt->execute();

$users = $stmt->fetchAll()

$username = 'Bob';
$email = 'bob@gmail.com';
$nickname = 'BobTheMan';

foreach($users as $user)
{
    if($user['username'] == $username)
    {
        // there is a user by this username
    }
    if($user['email'] == $email)
    {
        // there is a user by this email
    }
    if($user['nickname'] == $nickname)
    {
        // there is a user by this nickname
    }
}

【讨论】:

    【解决方案3】:
    1. 使用准备好的语句。并且 mysql_* 已被弃用

    2. SELECT * 而不是 SELECT 'username' 将返回整行,您可以检查所有字段

    【讨论】:

    • 为什么 * 而不仅仅是username,他/她只想知道用户是否已经存在
    • 哦...阅读后我想他想知道这些字段是否已填充,而不是他想根据这些字段检查用户名)
    • Bhavik Shah,他还想知道如何检查数据库中是否存在“email”和“nickname”,如果他只获取用户名,然后是电子邮件,然后是昵称,他将运行 3 次查询到数据库,而不是抓取所有列,然后用 PHP(使用 1 个查询)循环遍历它们
    【解决方案4】:
    $result = $conn->query($sql);
    if ($result->num_rows > 0) {
      print_r($result);
    } else {
      echo "0 results";
    }
    

    【讨论】:

      【解决方案5】:
      // sql injection friendly code! *here*
      $query = "SELECT `username` FROM `users`
          WHERE '$username' IN (`username`, `email`, `nickname`) LIMIT 1;";
      $query_run = mysql_query($query);
      if (mysql_num_rows($query_run) == 1){
          echo "Username already exist.";
      }
      

      我假设值在 users 中是唯一的,就像在 == 1 中一样。否则将== 1 更改为> 0 并删除LIMIT 1

      【讨论】:

        【解决方案6】:

        扩展 Nouphal 所说的内容。

        $query = "SELECT `username` FROM `users` WHERE `username'=$username OR 'email' = $email";
        

        【讨论】:

          猜你喜欢
          • 2015-02-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-02
          • 1970-01-01
          相关资源
          最近更新 更多