php查询没有正常死亡

时间:2017-01-05 01:14:47

标签: php mysql mysqli

我在查询“死”时遇到了一些麻烦。我正在使用html表单来搜索表格中的数据。现在,如果数据存在,查询工作完美显示我需要的一切。但如果我知道在我的代码中使用die存在数据,我希望它显示“获取数据时出错,请再次搜索”,但事实并非如此。一切都没有,绝对没有!你能看到代码中的任何错误吗?如果需要,我可以上传整个html文件。我已经看了几个小时,开始有点生气!感谢

if (isset($_POST['submitted'])) {

    $category = $_POST ['category'];
    $criteria = $_POST ['criteria'];

    $query = "SELECT g.GameID, g.GameName, g.PubID, g.TimePeriodID, g.SettingID, g.MoodID, g.GameWeaponID, g.GameCameraAngleID, g.GamePlayerTypeID, g.GameDescription FROM GameTable g WHERE $category = '$criteria'";  //selecting all the data from the game table that makes the search criteria
    $result = mysqli_query($dbcon, $query) or die("Error getting data please search again");

    echo "<table class='col-md-12'>"; // displays the searched data as a table


    while ($row = mysqli_fetch_array($result)) {

        echo "<form class=col-md-6 action=searchgame.php method=post>";
        echo "<tr> <th> Game ID</th> </tr>";
        echo "<tr>";
        echo "<td>" . "<input class=text-black type=text name=gameid readonly=readonly value=" . $row['GameID'] . " </td> <br>"; //here i have made the game Id read only so that it is not editable by the administrator
        echo "<tr> <th> Game Name</th> </tr>";
        echo "<td>" . "<input class=text-black type=text name=gamename value=" .$row['GameName'] . " < /td> <br>"; // editable boxes so administator can update
        echo "<tr> <th> Publisher ID</th> </tr>";
        echo "<td>" . "<input class=text-black type=text name=pubid value=" . $row['PubID'] . " < /td><br>";
        echo "<tr> <th> Time Period ID</th> </tr>";
        echo "<td>" . "<input class=text-black type=text name=timeperiodid value=" . $row['TimePeriodID'] . " < /td><br>";
        echo "<tr> <th> Setting ID</th> </tr>";
        echo "<td>" . "<input class=text-black type=text name=settingid value=" . $row['SettingID'] . " < /td> <br>"; 
        echo "<tr> <th> Mood ID</th> </tr>";
        echo "<td>" . "<input class=text-black type=text name=moodid value=" . $row['MoodID'] . " < /td><br>";
        echo "<tr> <th> Weapon ID</th> </tr>";
        echo "<td>" . "<input class=text-black type=text name=gameweaponid value=" . $row['GameWeaponID'] . " < /td><br>";
        echo "<tr> <th> Camera Angle ID</th> </tr>";
        echo "<td>" . "<input class=text-black type=text name=gamecameraangleid value=" . $row['GameCameraAngleID'] . " < /td><br>";
        echo "<tr> <th> Player ID</th> </tr>";
        echo "<td>" . "<input class=text-black type=text name=gameplayertype value=" . $row['GamePlayerTypeID'] . " < /td><br>";
        echo "<tr> <th> Game Description</th> </tr>";
        echo "<td>" . "<textarea style=height:200px;width:300px; class=text-black type=text name=gamedescription value=>" . $row['GameDescription'] . "</textarea><br>";
        echo "<td>" . "<input type=hidden name=hidden value=" . $row['GameID'] . " </td>";

        echo "<td>" . "<input class=text-black input-button-rounded type=submit name=update value=Update" . " </td>"; //update button 
        echo "<td>" . "<input class=text-black input-button-rounded type=submit name=delete value=Delete" . " </td>"; //delete button
        echo "</tr>";
        echo"</form>";

    }

    echo "</table>";
}
?>

2 个答案:

答案 0 :(得分:3)

这是您问题的关键部分

  

但如果我知道数据不存在

die没有做任何事情的原因是查询完成得很好,只是没有结果。

试试这个

  if( !$result->num_rows )  die('please search again');

每个说法没有error,只有空结果集。使用结果集num_rows的属性将告诉您与搜索匹配的行数。在0 PHP的情况下,PHP会将其视为false!

只有当前面的方法返回false时才执行Die,当你从mysqli返回结果集对象时,情况并非如此。

很多人都不了解这是做什么的,或者只是不知道

     $result = mysqli_query($dbcon, $query) or die("Error getting data please search again");

这大致相当于这个

       if( ($result = mysqli_query($dbcon, $query)) || die("Error getting data please search again"));

我们只是跳过if,or是一个逻辑运算符,你可以在if语句中使用就好了。使用OR||的唯一区别是它们被评估时的优先级(或者我读了一些)。我从未在7年内将OR置于if语句中...... lol

http://www.w3schools.com/php/php_operators.asp

       if( ($result = mysqli_query($dbcon, $query)) OR die("Error getting data please search again"));

所有这一切都说明如果第一个条件在语句中是真的,因为OR不需要检查第二个语句。这就是全部。

答案 1 :(得分:0)

  

“我在查询'死'时遇到了一些麻烦。我正在使用html表单来搜索表中的数据。现在如果数据存在,查询工作完美地显示我需要的一切它也是。但如果我知道在我的代码中使用模具不存在数据,我希望它显示“获取数据时出错请再次搜索”,但事实并非如此。一切都没有,绝对没有!“

在多次阅读该问题之后,得出的结论是,您需要的是else {...}的{​​{1}}语句。

  

“你能看到代码中的任何错误吗?”

答:不可以。您只需要使用if{...}

但是,如果您的查询在任何给定时间都失败了,您应该使用else{...}检查实际错误。

修改

我确实需要声明您的代码对SQL注入是开放的。

使用准备好的陈述。

参考文献:

并在PHP.net上: