【问题标题】:check if SQL row exists with PHP使用 PHP 检查 SQL 行是否存在
【发布时间】:2011-09-30 23:48:25
【问题描述】:

我正在使用 MySQL 和 PHP,我需要做这样的事情(伪代码):

if (sql row exists where username='bob')
{
    // do this stuff
}

【问题讨论】:

标签: php sql database if-statement


【解决方案1】:

如果你使用的是mysql数据库,那么使用下面的——

$query = "SELECT username from my_table where username='bob'";
$result = mysql_query($query);

if(mysql_num_rows($result) > 0)
{
    // row exists. do whatever you would like to do.
}

如果您想按照 alex 的建议使用 PDO (PHP Data Object),请使用以下代码 -

$dbh = new PDO("mysql:host=your_host_name;dbname=your_db_name", $user, $pass);
$stmt = $dbh->prepare("SELECT username from my_table where username = ':name'");
$stmt->bindParam(":name", "bob");
$stmt->execute();

if($stmt->rowCount() > 0)
{
    // row exists. do whatever you want to do.
}

【讨论】:

  • 我建议使用 PDO 之类的东西,而不是 mysql_*()
  • 选择“用户名”而不是*,效率会更高
【解决方案2】:

另一种方法

$user = "bob";
$user = mysql_real_escape_string($user);
$result = mysql_query("SELECT COUNT(*) AS num_rows FROM my_table WHERE username='{$user}' LIMIT 1;");
$row = mysql_fetch_array($result);
if($row["num_rows"] > 0){
   //user exists
}

【讨论】:

    【解决方案3】:

    Sayem 的回答获得了最多的支持,但我认为关于 PDO 的回答是不正确的。

    来自PHP docs

    对于大多数数据库,PDOStatement::rowCount() 不返回受 SELECT 语句影响的行数。相反,使用 PDO::query() 发出 SELECT COUNT(*) 语句,其谓词与预期的 SELECT 语句相同,然后使用 PDOStatement::fetchColumn() 检索将返回的行数。

    $sql = "SELECT COUNT(*) FROM fruit WHERE calories > 100";
    if ($res = $conn->query($sql)) {
    
      /* Check the number of rows that match the SELECT statement */
      if ($res->fetchColumn() > 0) {
    
           /* Issue the real SELECT statement and work with the results */
           $sql = "SELECT name FROM fruit WHERE calories > 100";
           foreach ($conn->query($sql) as $row) {
               print "Name: " .  $row['NAME'] . "\n";
           }
      }
      /* No rows matched -- do something else */
      else {
          print "No rows matched the query.";
      }
    }
    
    $res = null;
    $conn = null;
    

    【讨论】:

      猜你喜欢
      • 2012-08-12
      • 1970-01-01
      • 1970-01-01
      • 2014-06-13
      • 1970-01-01
      • 2014-03-15
      • 2010-10-02
      • 2012-03-10
      • 2011-07-21
      相关资源
      最近更新 更多