【问题标题】:PHP check for existing entry in database [closed]PHP检查数据库中的现有条目[关闭]
【发布时间】:2013-04-25 06:18:13
【问题描述】:

我正在尝试查找用户名是否已在数据库中。出于某种原因,$result 返回 false,我不知道为什么。我可以很好地将东西放入数据库。如果这很重要,我会使用 Fugu 将我的代码上传到服务器。我是 php 的新手,所以任何帮助都会很棒!

查询失败的代码如下:

$dbh = new PDO('mysql:host=localhost;dbname=baseuser' . $db_users_database, $db_user, $db_pass);
    $result = mysql_query("SELECT COUNT(username) FROM users WHERE username='$username' GROUP BY username");
                $num_rows = mysql_num_rows($result);

                if ($num_rows != 0) {
                  echo "username taken";
                }

【问题讨论】:

  • 你到底为什么要使用 PDO 和函数 mysql_query。他们不一起工作。如果您采用PDO 方式,请使用基于PDO 的所有功能。 php.net/manual/en/pdo.query.php
  • 为什么人们这么粗鲁,我的意思是 6 票反对,没有人愿意告诉/建议改进问题
  • @NoobASThreeDeveloper:嗯?从什么时候开始反对改善问题?投票对问题进行评分。 Downvotes 并不粗鲁,它们是“粗鲁”要求答案的同一系统的一部分。你在这里问问题是不是也很粗鲁?

标签: php sql


【解决方案1】:

像这样使用PDOPDOmysql_*函数不能一起使用,你必须分开使用它们

$sth = $dbh->prepare('SELECT COUNT(username) FROM users 
WHERE username= :username GROUP BY username');
$sth->bindParam(':username', $username, PDO::PARAM_STR);
$sth->execute();

if ($sth->fetchColumn() > 0) {
   echo "username taken";
}

【讨论】:

  • 谢谢!完美地工作。只有我的 php 的第二天。
  • @AngelaChen 如果你是PHP 的新程序员,那么我会建议你继续使用PDO,因为它会阻止SQL Injection
【解决方案2】:

您正在使用PDO 连接到您的表,然后您尝试使用-已弃用-mysql extension 进行查询。这行不通。

坚持使用PDO,然后使用 PDO 使用query,您甚至可以使用准备好的语句将其提升到一个新的水平。

例子:

$dbh = new PDO('seeyourcode');
$sql = "SELECT COUNT(username) 
        FROM users 
        WHERE username= :user 
        GROUP BY username";

// Prepare the statement
$sth = $dbh->prepare($sql);
$sth->bindParam(':user', $username, PDO::PARAM_STR);

// now execute
$sth->execute();

// fetch the result
$result = $sth->fetchAll();
var_dump($result);

var_dump() 只是为了让您了解对象的外观。您可以在那里执行任何您想要的操作并获得结果。

【讨论】:

    【解决方案3】:

    使用这个:

    $stmt = $dbh->prepare('SELECT EXISTS(SELECT * FROM `users` WHERE `username` LIKE :username) as `taken`');
    $stmt->bindParam(':username', $username, PDO::PARAM_STR);
    $stmt->execute();
    
    $result = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if($result['taken']){
        echo "username taken";
    }
    
    $stmt = null;
    

    另外,您错误地使用了PDO。检查manual

    【讨论】:

      【解决方案4】:

      不要让它变得复杂。使用简单的连接方法并使用查询像这样:

      $check_if_already = mysql_query("SELECT * FROM uxxx where id = 1113");
      
      $count_total_rows = mysql_num_rows($check_if_already);
      echo $count_total_rows;
      
          if ($count_total_rows > 0) {
             echo "Not duplicate";
             //do your task here
          } else {
              echo 'Duplicate';
          }
      

      【讨论】:

      猜你喜欢
      • 2017-04-02
      • 2014-04-21
      • 2019-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-04
      • 2018-11-21
      相关资源
      最近更新 更多