PHP:如何让我的IF语句与PDO选择一起使用?

时间:2017-06-28 20:14:32

标签: php pdo

我希望我的下面的PDO选择使用底部的两个IF语句?
第一个IF我只是想确保没有错误。
第二个IF我想检查它返回多少行。我知道这number of rows == 0不起作用 有没有办法做到这一点?

try {
    $conn = new PDO('mysql:host=localhost;dbname=zs', 'zs', 'rlkj08sfSsdf');
    $conn ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    echo $e->getMessage();
    die();
}

$stmt = $conn->prepare("SELECT * FROM zip WHERE zip_code =:zip1");
$stmt->bindValue(':zip1', $_POST[zipcode], PDO::PARAM_INT);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);


if($rows = "") {
    echo "<p><strong>There was a database error attempting to retrieve your ZIP Code.</strong></p>\n";
}
if(number of rows == 0) {
    echo "<p><strong>No database match for provided ZIP Code.</strong> Please enter a new ZIP Code.</p>\n"; 
}

1 个答案:

答案 0 :(得分:1)

您只对包含特定值的记录感兴趣。选择所有并在PHP中计算记录是没有意义的。这是浪费资源。想象一下,如果有一百万条记录会发生什么。

您要解决的问题是简单地向您的数据库询问包含特定值的COUNT行。你的代码应该很简单:

$stmt = $conn->prepare("SELECT COUNT(*) AS num_rows FROM zip WHERE zip_code = :zip");
$stmt->bindValue(':zip', $_POST['zipcode'], PDO::PARAM_INT);

$stmt->execute();

$count = (int)$stmt->fetchColumn();

if($count)
{
    echo "Success";
}
else
{
    echo "Bummer";
}

注意:

  • 如果成功,上面的查询将始终返回包含1列的1行,名为num_rows,对于没有匹配的记录将为0,如果有记录则为大于0的整数。如果您使用PHP本机驱动程序,PHP将在内部正确地将此值表示为整数。如果你有MySQL ND,我故意把类型转换,你可以删除它((int)部分。)
  • 如果在查询执行期间出现问题,则会抛出异常。该片段不包含该内容。您在异常模式下正确设置了PDO,并且使用bindValue代替bindParam,这意味着您的研究正确并且您正确使用PDO,这意味着您应该轻松实现错误处理在这种特殊情况下。