在 PHP 中使用 if / else 检查 SQL 查询
Posted
技术标签:
【中文标题】在 PHP 中使用 if / else 检查 SQL 查询【英文标题】:check a SQL query with if / else in PHP 【发布时间】:2013-09-29 18:59:54 【问题描述】:我在这方面完全是新手,但尝试通过自己/教程学习很多东西。但是,我似乎无法找到这个(可能)简单问题的答案。我想检查我的 SQL 数据库的输出是否小于 10,然后给我 INT 的当前值。如果它还不是 10 或更多,那么我想输出一行,如果是,则输出另一行。但是,它目前似乎无法正常工作。
//Connect to DB
$con = mysqli_connect("localhost","root","root","cursuson");
//Get counter!
$getcounter = mysqli_query($con,"SELECT * FROM cursus01");
$cursus01 = mysqli_fetch_assoc($getcounter);
//check if output is less than 10
if(count($cursus01) <= 10)
echo 'aantal aanmeldingen is ' . $cursus01['counter'] . '<br>';
else
echo 'De cursus gaat door! <br>';
//check the output
echo '<b>Aantal aanmeldingen:</b> ' . $cursus01['counter'] . '<br>';
echo '<b>ID:</b> ' . $cursus01['id'];
【问题讨论】:
目前究竟是什么不起作用?错误消息/意外输出是什么? 【参考方案1】:我假设您正在尝试从数据库中获取行数(就像其他人所做的那样),并且在此答案下方留下了如果是这种情况的答案。您可能会发现它很有用,删除它似乎是一种浪费!
无论如何,从您上面的评论和问题中的$cursus01['counter']
来看,我现在假设您真正想要的是以下内容......
解决方案
我建议您使用下面的mysqli
方法,因为mysql
将在近 将来的某个时候从该语言中删除,因为它已被弃用!如果您继续使用它并使用它创建站点/应用程序,那么当这种情况最终发生时,您要么必须使用旧版本的 php
,它有其自身的风险/限制,要么面临有很多损坏的代码需要修复...
mysql
mysql_connect("localhost","root","root");
mysql_select_db("cursuson");
$query = mysql_query("SELECT * FROM cursus01");
if(mysql_num_rows($query))
//Rows are returned
while($row = mysql_fetch_assoc($query))
//Do stuff with row data
if($row['counter'] <= 10)
//Counter is less than or exactly 10
else
//Counter is greater than 10
else
//No rows were returned
mysqli
$mysqli = new mysqli('localhost', 'root', 'root', 'cursuson');
$result = $mysqli->query("SELECT * FROM cursus01");
if($result->num_rows;)
//Rows are returned
while($row = $result->fetch_assoc())
//Do stuff with row data
if($row['counter'] <= 10)
//Counter is less than or exactly 10
else
//Counter is greater than 10
else
//No rows were returned
原答案
我假设您实际上是在尝试对echo
返回的行数进行计数?您当前的代码echo
s 是对列数的计数。如果您还不知道,这表明这里存在更大的问题....
解决方案
mysql
mysql_connect("localhost","root","root");
mysql_select_db("cursuson");
$query = mysql_query("SELECT * FROM cursus01");
$count = mysql_num_rows($query);
if($count <= 10)
//Less than (or exactly) 10 rows were returned
while($row = mysql_fetch_assoc($query))
//Do stuff with row data
else if($count > 10)
//More than 10 rows were returned
while($row = mysql_fetch_assoc($query))
//Do stuff with row data
else
//No rows were returned
mysqli
$mysqli = new mysqli('localhost', 'root', 'root', 'cursuson');
$result = $mysqli->query("SELECT * FROM cursus01");
$count = $query->num_rows;
if($count <= 10)
//Less than (or exactly) 10 rows were returned
while($row = $result->fetch_assoc())
//Do stuff with row data
else if($count > 10)
//More than 10 rows were returned
while($row = $result->fetch_assoc())
//Do stuff with row data
else
//No rows were returned
【讨论】:
不错,简洁的答案,我认为他也在尝试测试 counter 字段的值,但还不清楚。如果是这样,当场。 +1【参考方案2】:按照您执行此操作的方式,每次计数都将相同。你 count($cursus01) 返回数据库中的列数,要获取行数,你应该使用 num_rows 函数或进行计数查询,除非你需要查询中的数据,在这种情况下你应该做一些事情喜欢....
$cursus01 = array();
while($row = mysql_fetch_assoc($getcounter))
$cursus01[] = $row;
在这种情况下,count($cursus01) 将返回行数。希望我没有混淆你在问什么。正如爱德华指出的那样,您应该开始使用 mysqli 而不是 mysql。您可能还想研究使用 oop 而不是过程调用。示例见手册HERE
【讨论】:
+1 for num_rows,但是,OP 应该使用 mysqli,因为 mysql 已贬值。 我需要 INT 的实际值(例如 3 或 5)。我正在尝试创建一些东西,当单击/确认 X 次时,它会从打开变为关闭(if/else 语句)。使用 SQL,因此它不是基于会话的,而是存储的。我不是在寻找行数/列数。 数据库中某列的值? db 表中是否只有一行?我不确定我是否理解这个问题。 目前只有一行。但我想要数据库中一个单元格的具体值。这是一个INT。然后我想要一个大于 if / else 语句的检查。很抱歉,我无法更具体地解释这个问题,因为我说我对此太陌生,无法正确解释这个问题。 那么单元格的名称是什么?是柜台领域吗?同样,当您在表中获得多行时,您将需要在查询中引入 where 子句,否则您将获得所有行。并且没有循环你只会得到第一行。【参考方案3】:同意 Bryan 的回答,但是在计算数据库行数时,我会选择使用 MySQL 计数的选项。在这种情况下,代码行将是:
$getcounter = mysql_query("SELECT COUNT(*) FROM cursus01");
您将使用此查询获得确切的行数
【讨论】:
【参考方案4】:我假设您想计算表中存储的记录数。 使用 mysqli_num_rows() 函数代替 count()。
$con = mysqli_connect("localhost","root","root","cursuson");
$getcounter = mysqli_query($con,"SELECT * FROM cursus01");
$row = array();//create an empty array
//check if output is less than 10
if(mysqli_num_rows($getCounter) <= 10):
$row = mysqli_fetch_array($getCounter);
echo $row['counter']."<br>";
else:
echo 'De cursus gaat door! <br>';
endif;
//display the output
echo '<b>Aantal aanmeldingen:</b> ' . $row['counter'] . '<br>';
echo '<b>ID:</b> ' . $row['id'];
【讨论】:
以上是关于在 PHP 中使用 if / else 检查 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章
是否建议使用 if...else 条件来检查键或使用 try...except 在 python 中捕获 KeyError 异常?