我编写了一个从数据库中输出动物名称的程序。但是,当我找不到合适的值(数据库中没有的值)时,我的程序无法执行该程序的问题< / p>
<?php
$host='localhost';
$user='root';
$password='root';
$dbname='pet';
$connect=mysqli_connect($host,$user,$password,$dbname) or die("can not connect to server");
if(@$_GET['data']=='yes')
{
$animalName=trim($_POST['animal']);
$query="SELECT name FROM display WHERE name='$animalName'";
$result=mysqli_query($connect,$query) or die("can not execute query");
while($row=mysqli_fetch_assoc($result))
{
extract($row);
if(!$name==$animalName)
{
echo "not found";
}
else
{
echo "Hello $name. Have a nice day.";
}
}
}
else
{
echo "<form action='$_SERVER[PHP_SELF]?data=yes' method='POST'>
<h4>type an animal name in the box below and press enter</h4>
<p><input type='text' name='animal' maxlength='20'></p>
<p><input type='submit' value='submit'></p>
</form>";
}
?>
当我输入数据库中不存在的动物时,我的代码无法执行此块(它转到空白页面)
if(!$name==$animalName)
{
echo "not found";
}
有没有解决方案。
答案 0 :(得分:4)
如果您没有从数据库中获取结果集中的任何行,则while循环中的代码将永远不会执行。
您可能需要做的是在尝试进入while循环之前检查结果集中的行数。如果你有0行,只需发出消息,不要试图在while循环中“获取”数据库中的任何结果。
答案 1 :(得分:3)
在while循环
之前使用mysqli_num_rows()
<?php
$host = 'localhost';
$user = 'root';
$password = 'root';
$dbname = 'pet';
$connect = mysqli_connect($host, $user, $password, $dbname) or die("can not connect to server");
if (@$_GET['data'] == 'yes') {
$animalName = trim($_POST['animal']);
$query = "SELECT name FROM display WHERE name='$animalName'";
$result = mysqli_query($connect, $query) or die("can not execute query");
if (mysqli_num_rows($result) > 0) {
while ($row = mysqli_fetch_assoc($result)) {
extract($row);
if (!$name == $animalName) {
echo "not found";
} else {
echo "Hello $name. Have a nice day.";
}
}
} else
echo "data not found";
} else {
echo "<form action='$_SERVER[PHP_SELF]?data=yes' method='POST'>
<h4>type an animal name in the box below and press enter</h4>
<p><input type='text' name='animal' maxlength='20'></p>
<p><input type='submit' value='submit'></p>
</form>";
}
?>
答案 2 :(得分:1)
试试这个:
if ($name != $animalName) {
您的查询也容易受到SQL注入攻击。
答案 3 :(得分:0)
由于db中没有动物,当SELECT失败时,您错过了对mysql_query()返回没有行的检查。在$ result = mysqli_query($ connect,$ query)语句后添加以下内容:
$result = mysqli_query($connect,$query);
if (mysql_num_rows($result) == 0) {
echo "not found";
}