使用PHP检查SQL行是否存在

16

我正在使用PHP和MySQL,我需要做类似于以下的事情(伪代码):

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

1
你使用的是哪个数据库驱动程序? - alex
请看PHP手册中的示例#1,关于mysql_fetch_assoc - brady.vitrano
这个回答解决了你的问题吗?如何在MySQL中检查一行是否存在? - Dharman
3个回答

29

如果您想使用PDO(PHP数据对象),请使用以下代码:

$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.
}

请注意 PHP 文档中对 rowCount() 的说明:“如果与关联的 PDOStatement 执行的最后一个 SQL 语句是 SELECT 语句,则某些数据库可能会返回该语句返回的行数。但是,并非所有数据库都保证此行为,因此不应依赖于可移植应用程序。”。因此,请先检查您的数据库是否返回了正确的行数。 - PhoneixS

14
Sayem的回答得到了最多的赞同票,但我认为他在PDO方面的回答是错误的。
根据PHP文档:
对于大多数数据库,PDOStatement::rowCount()并不返回受SELECT语句影响的行数。相反,使用PDO::query()来发出一个带有与您打算的SELECT语句相同谓词的SELECT COUNT(*)语句,然后使用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;

3
另一种方法
$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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接