【问题标题】:If-statement in while loop with mysql is never true PHPmysql的while循环中的if语句永远不是真的PHP
【发布时间】:2015-12-12 18:21:32
【问题描述】:

我在 PHP 的 while 循环中遇到了 if 语句的问题。我有一个名为 $all_teams 的团队数组。假设它包含蓝队、红队和黄队。我还有一个将对象分配给团队的数据库。

DatabaseID | State |  Team | ... 
12           Ready    Blue
33           Finished Red
65           Ready    Blue

我现在正在尝试运行以下代码:

 <?php
$query = "SELECT DISTINCT * FROM `dmt_objects` WHERE PipelineAndWorkflow = 'RWP WF  Ready for 4Sprint' ORDER BY `Team` DESC  ;";
                        $select_projects = mysql_query($query);
    foreach($all_teams as $team){
        echo '<tr id = '.$team.'><td>'.$team.'</td><td>';
            while($all_objects = mysql_fetch_array($select_projects)){
                if($all_objects['Team'] == $team){
                    echo ''.$all_objects['DatabaseID'].'</br>';
                }
            }
        echo '</td></tr>';

    }
    ?>

我正在尝试创建一个应该如下所示的表格。

Blue   | 12
         65
Red    | 33
Yellow |

if 语句

if($all_objects['Team'] == $team)

从来都不是真的...为什么?我该如何解决我的问题?

【问题讨论】:

  • 您是否尝试过在表达式的每一侧打印值并查看您得到的输出?
  • 部分这只适用于第一支球队。需要重置查询结果(可能使用mysql_data_seek)
  • @db579 如果我移动 echo ''.$all_objects['DatabaseID'].'';在 If 语句之前,它会打印出第一队行中的所有 ID
  • 只需在 if 语句之前回显 $all_objects['Team'] 和 $team。您应该能够从中看到发生了什么。

标签: php mysql if-statement while-loop


【解决方案1】:

警告不要使用mysql_,而是使用mysqli_PDO
仔细阅读:mysql_ deprecated

<?php
$query           = "SELECT DISTINCT * FROM `dmt_objects` WHERE PipelineAndWorkflow = 'RWP WF  Ready for 4Sprint' ORDER BY `Team` DESC  ;";
$select_projects = mysql_query($query);
$all_objects     = mysql_fetch_array($select_projects)

foreach($all_teams as $team){
    echo '<tr id = '.$team.'><td>'.$team.'</td><td>';
        foreach($all_objects as $obj)
            if($obj['Team'] == $team){
                echo ''.$obj['DatabaseID'].'</br>';
            }
        }
    echo '</td></tr>';

}
?>

【讨论】:

  • 为什么 mysqli 必须使用 mysql?我也在开发网络和新手。所以知道的不多。
  • 不推荐使用 mysql_* 函数。即,它们不再被开发,并将在未来的 php 版本中被删除(从手册页中,php 7 将删除这些功能)。
  • @RohanKhude :我添加了官方文档的链接。这是一个非常古老的扩展,超过 17 年......易受 SQL 注入攻击,并且它在低级别连接到 MySQL 服务器。 SO上有很多关于此的主题。希望我的回答和警告对您有所帮助:)
  • 但现在我已经开发了大约 50 页的 php。用 mysql。我如何用 mysqli 更新它
【解决方案2】:

在每个循环之后重置结果集指针(现在忽略您正在使用已弃用的 mysql_* 函数):-

<?php
$query = "SELECT DISTINCT * 
            FROM `dmt_objects` 
            WHERE PipelineAndWorkflow = 'RWP WF  Ready for 4Sprint' 
            AND Team IN ('".implode("','", $all_teams)."')
            ORDER BY `Team` DESC  ;";
if ($select_projects = mysql_query($query))
{
    foreach($all_teams as $team)
    {
        echo "<tr id = '$team'><td>$team</td><td>";
        while($all_objects = mysql_fetch_assoc($select_projects))
        {
            if($all_objects['Team'] == $team)
            {
                echo ''.$all_objects['DatabaseID'].'</br>';
            }
        }
        echo '</td></tr>';
        mysql_data_seek($select_projects, 0);
    }
}
else
{
    die(mysql_error());
}
?>

【讨论】:

  • 谢谢!有没有从mysql切换的简单方法?
  • 很多事情都很容易。 Mysqli 支持参数化查询,切换到这些查询需要做更多的工作(同时也降低了查询的可读性,并且很难在可用状态下回显失败的查询)。您可以以与 mysql_* 函数大致相同的方式使用 mysqli,并且大多数只需要更改名称即可。更难更改的主要是 mysqli_real_escape_string,其中链接标识符成为强制性的,并且成为第一个参数而不是 mysql_real_escape_string 中的第二个参数。
  • 你没有对 mysqli_ 发出警告 :( :(
猜你喜欢
  • 2013-11-01
  • 2017-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-20
  • 2020-07-24
  • 1970-01-01
相关资源
最近更新 更多