我希望我的下面的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";
}
答案 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";
}
注意:
num_rows
,对于没有匹配的记录将为0
,如果有记录则为大于0
的整数。如果您使用PHP本机驱动程序,PHP将在内部正确地将此值表示为整数。如果你有MySQL ND,我故意把类型转换,你可以删除它((int)
部分。)bindValue
代替bindParam
,这意味着您的研究正确并且您正确使用PDO,这意味着您应该轻松实现错误处理在这种特殊情况下。