在 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 返回的行数进行计数?您当前的代码echos 是对列数的计数。如果您还不知道,这表明这里存在更大的问题....

解决方案

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 查询的主要内容,如果未能解决你的问题,请参考以下文章

检查PHP curl请求是否已超时

是否建议使用 if...else 条件来检查键或使用 try...except 在 python 中捕获 KeyError 异常?

在 if/else PHP 语句中使用 'and' 和 'or'

如何在php中使用if else条件与Join

使用if else bash脚本检查变量是不是存在[重复]

PHP中elseif与else if的区别