PHP:如何让我的 IF 语句与 PDO 选择一起使用?
Posted
技术标签:
【中文标题】PHP:如何让我的 IF 语句与 PDO 选择一起使用?【英文标题】:PHP: How do I get my IF statement to work with PDO select? 【发布时间】:2017-06-28 20:14:32 【问题描述】:我希望下面的 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";
【问题讨论】:
if($rows = "")
这是一个分配,而不是比较。
fetchAll()
返回一个数组。您可以使用empty()
或count()
来测试其中是否有任何内容。
不要考虑邮政编码int
s,你会遇到前导零的问题。 ***.com/questions/893454/…
你永远不应该在没有适当过滤的情况下在 SELECT 中使用 $_POST 变量——这是在调用 SQL 注入!
@Zac67 他正在使用准备好的语句。你的评论是绝对错误的。
【参考方案1】:
您只对是否存在包含特定值的记录感兴趣。选择 everything 并计算 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 中使用 MySQL 本机驱动程序,PHP 将在内部正确地将此值表示为整数。我特意加入了类型转换,如果你有 MySQL ND,你可以删除它((int)
部分)。
如果查询执行过程中出现问题,将抛出异常。 sn-p 没有涵盖这一点。您正确地将 PDO 设置为异常模式,并使用 bindValue
而不是 bindParam
,这意味着您进行了正确的研究并且您正确使用了 PDO,这意味着您应该在这种特殊情况下轻松实现错误处理.
【讨论】:
以上是关于PHP:如何让我的 IF 语句与 PDO 选择一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
在 PHP 中,当将 PDO 与 pgSQL 一起使用时,如何在原始 INSERT sql 查询中获取“RETURNING”子句的值