错误“查询为空”

时间:2013-09-06 16:45:18

标签: php html mysql

我想创建一个包含类别和名称的表单的页面,我应该从数据库中检索名称。我之前问过这个问题,现在我修改了我的代码,结果显示“查询为空”。我不知道为什么会这样说。这是我的所有页面代码。

<html>
<head>
<title>Assign Examiner</title>
</head>

<body>

<?php include('../include/dbconnect.php');

$names=$_POST['user'];
$exp = $_POST['expert'];

$mysql_i=mysql_query("SELECT name FROM user WHERE expert='".$exp."'");
$mysql_res = mysql_query($mysql_i) or die(mysql_error());

mysql_close();

?>

<form name="examiner" action="" method="post">

<table align="center" width="50%" border="1">

<tr>
<td>Category :</td>
    <td><select name="expertise"><option value="multimedia">Multimedia
                     <option value="security">Security & Networking
                                 <option value="mobile">Android Mobile
                                 <option value="web">Web Development
                                 </option></option</option></option>
        </select>
    </td>
</tr>
<tr>
<td>Name :</td>
    <td><select name="exam"><option value="<?php echo $mysql_i;?>">PLEASE CHOOSE</option></select></td>
</tr>
</body>
</html>

2 个答案:

答案 0 :(得分:1)

您正在调用mysql_query()函数两次,这是不正确的。代码应该更像

$mysql_i = mysql_query("SELECT name FROM user WHERE expert='".$exp."'");

$actual_data = mysql_fetch_assoc($mysql_i);

echo $actual_data['some_table_field'];

mysql_query()返回语句句柄(或布尔false - 失败时)。然后在各种fetch()和其他相关元数据函数中使用该句柄。

另请注意,您很容易受到SQL injection attacks的攻击。在学习如何避免使用此代码之前,请不要使用此代码。

答案 1 :(得分:1)

第一个问题是您在查询中使用用户输入的数据。您应该考虑转移到mysqli_或PDO - 它们都可以帮助您编写更安全的代码。如果你无法切换,那么你需要sanitise the input以确保它不会对你的代码做任何讨厌的事情

第二个问题是:

$mysql_i=mysql_query("SELECT name FROM user WHERE expert='".$exp."'");
$mysql_res = mysql_query($mysql_i) or die(mysql_error());

你正在调用mysql_query两次,第二次,你传递了第一个查询的结果。那不会做任何事情。您所需要的只是:

$exp = mysql_real_escape_string($exp);    // sanitise your input!!!!

$sql = "SELECT name FROM user WHERE expert='".$exp."'";
$mysql_res = mysql_query($sql) or die(mysql_error());

你的<form>被称为“专家”中也没有任何内容,因此$_POST['expert']可能是空白的 - 你的意思是'专业知识吗? $_POST['user']也是如此。