0

我试图使用以下 if/else 语句来构建查询,但在第一步评估 NULL 时遇到问题。

在网上搜索后,我似乎无法追踪我做错了什么......我应该使用空引号来代替:""
不过,这也给了我一个错误。

所以我不知道问题出在第一个块还是第二个块,也就是while循环。

有什么建议么?

$name = $_POST['Your_name'];

if ($location != "All" && $name == NULL)  $query="SELECT * FROM talent WHERE duty_station='$location')";
else if($location == "All" && $name != "All" ) $query="SELECT * FROM talent WHERE Your_name IN ('$name')";
else if($dutyReq != "All" && $name == "All" ) $query="SELECT * FROM talent WHERE  duty_station='$location'";
else if($location == "All" || $name == "All" ) $query="SELECT * FROM talent";

然后我打印数据的循环给了我这个错误:

警告:mysql_fetch_array():提供的参数不是第64/var/www/html/talent/searchresults.php中的有效 MySQL 结果资源

这是错误来自的代码:

   $result=mysql_query($query); 
   mysql_query($result);

    echo "<table border='1'>
    <tr>
    <th>Your name</th>
    <th>duty station</th>
    <th>first proficiency</th>
    </tr>";
   while($row = mysql_fetch_array($result)){
        echo "<tr>";
        echo "<td>" . $row['Your_name'] . "</td>";
        echo "<td>" . $row['duty_station'] . "</td>";
        echo "<td>" . $row['prof_order_processing'] . "</td>";
        echo "</tr>";
        }
echo "</table>";
4

3 回答 3

1

我认为问题出在这一行:

mysql_query($result);

它不应该在那里。您不能调用 mysql_query 函数并给它一个不是 sql 脚本的变量。删除这一行。

于 2012-09-09T22:06:40.647 回答
1

您的第一个 SQL 查询中有一个错误(一个额外的右括号):

$query="SELECT * FROM talent WHERE duty_station='$location')";

它应该是:

$query="SELECT * FROM talent WHERE duty_station='$location'";

使用这些代码行:

$result=mysql_query($query); 
mysql_query($result);

你想达到什么目的?您正在尝试使用 MySQL 资源作为查询字符串。
删除第二行。


如果$_POST['name']没有设置,你会看到

注意:未定义的索引:第X<filename>中的名称

要解决此问题,请使用以下代码:

$name = empty($_POST['name']) ? null : $_POST['name'];

并记住保护您的代码免受 SQL 注入。

mysql_*不鼓励使用函数,您应该改用PDO
您可以使用它PDO::prepare来使您的代码更安全。

于 2012-09-09T22:18:02.253 回答
0

在php中你应该写这样的东西

$name = $_POST['Your_name'];
if(isset($name) && !empty($name))
{
  //some code
}

您还可以添加更多检查,例如 is_array (如果您期望纯字符串)等...

于 2012-09-09T21:59:16.917 回答