检查记录是否存在(PDO)

时间:2014-11-11 11:32:07

标签: php pdo

我正在尝试检查数据库中是否存在记录,但是当我运行下面的代码时,我得到的只是确认数据库连接的消息。解析代码后,我没有收到两条消息中的任何一条。我是PDO的新手并尝试了各种方法来完成这项工作,但仍然没有结果。有人可以帮忙吗?

<?php
$telephone= ($_GET [ 'telephone' ]);
try {
    $dbh = new PDO("mysql:host=$hostname;dbname=gosdirect", $username, $password);
    /*** echo a message saying we have connected ***/
 echo 'Connected to database<br />';

$sql = "SELECT COUNT(*) FROM directory WHERE telephone == $telephone";
if ($res = $dbh->query($sql)) {

    /* Check the number of rows that match the SELECT statement */
  if ($res->fetchColumn() > 0) {

           echo 'The telephone number: ' . $telephone. ' is already in the database<br />';
         }
     /* No rows matched -- do something else */
  else {
      echo 'No rows matched the query.';
    }
}

$res = null;
$dbh = null;
}
catch(PDOException $e)
   {
  echo $e->getMessage();
  }
?>

3 个答案:

答案 0 :(得分:6)

一些事情。 MySQL不使用==等于运算符,而应该只使用=。此外,由于您正在使用PDO,因此最好设置准备好的语句。

最后,由于您使用COUNT(*),您的查询将始终返回1条记录。您需要按如下方式更新代码:

$sql = $dbh->prepare("SELECT COUNT(*) AS `total` FROM directory WHERE telephone = :phone");
$sql->execute(array(':phone' => $telephone));
$result = $sql->fetchObject();

if ($result->total > 0) 
{
    echo 'The telephone number: ' . $telephone. ' is already in the database<br />';
}
else 
{
      echo 'No rows matched the query.';
}

可能值得注意的是,既然您已经从$telephone超级全球直接接收$_GET,那么您不应该将其无限制地输出到浏览器(出于XSS漏洞的原因)。我建议您更新第一个echo声明,如下所示:

echo 'The telephone number: ' . strip_tags($telephone). ' is already in the database<br />';

答案 1 :(得分:1)

中无需==
$sql = "SELECT COUNT(*) FROM directory WHERE telephone == $telephone"; 

应该是

$sql = "SELECT COUNT(*) FROM directory WHERE telephone = $telephone";

希望有所帮助

答案 2 :(得分:1)

类似的东西(没有SQL-Injection;)):

$sql = 'SELECT COUNT(*) FROM directory WHERE telephone = :phone';
$stmt = $conn->prepare($sql);
$sth->bindParam(':phone', $_GET['telephone'], PDO::PARAM_STR, 12);
$stmt->execute();

if($stmt->fetchColumn()) die('found');