从外部选择框传入值时,MySQL查询无效

时间:2012-02-28 18:21:16

标签: php mysql

我有两个正在使用的文件。第一个是前端选择框,其中包含动态填充的字符/文本值列表,这些值使用POST将所选值发送到后端文件。此后端文件将此值分配给变量,然后在以下查询中使用该变量:

    $query = "SELECT DoctorName, Speciality FROM hospital WHERE HospitalName =".$hosname;

但是,我一直收到我在my或die()中设置的无效查询消息;而且我不知道为什么。后端文件中完整的php代码部分如下:

    $conn = mysqli_connect("localhost", "root", "") or die ("No connection");
    mysqli_select_db($conn, "hospitaldb") or die("db will not open");

    $hosname=$_POST['valuelist'];
    $query = "SELECT DoctorName, Speciality FROM hospital WHERE HospitalName =".$hosname;

    $result = mysqli_query($conn, $query) or die("Invalid query");

    echo "<table border='1'><tr><th>mDoctorName</th><th>Speciality</th></tr>";

    while($row = mysqli_fetch_array($result))
      {
      echo "<tr><td>" . $row[0] . "</td><td>" . $row[1] . "</td></tr>";
      }
    echo "</table>";
    mysqli_close($conn);

注意:我已经检查过使用print传入选择框中的值,它是。任何帮助将不胜感激。

*我只在本地进行测试,但感谢所有推荐使用mysql_real_escape_string()的人来防止注射。*

5 个答案:

答案 0 :(得分:3)

看起来您没有将值包装在引号中,因此查询格式不正确。我的PHP生锈了,对不起,如果我的例子中存在语法错误,请在下面:

 $query = "SELECT DoctorName, Speciality FROM hospital WHERE HospitalName ='".$hosname ."';";

但是,字符串连接使您对SQL Injection(http://en.wikipedia.org/wiki/SQL_injection)开放。考虑使用预准备语句http://php.net/manual/en/pdo.prepare.php

答案 1 :(得分:2)

实际上,您的错误是需要用单引号括起您的变量,例如:

$query = "SELECT DoctorName, Speciality FROM hospital WHERE HospitalName ='".$hosname."'";

答案 2 :(得分:2)

您想要的结果SQL查询类似于;

SELECT DoctorName, Speciality FROM hospital WHERE HospitalName = 'MyHospital'

换句话说,您需要在查询创建中添加引号;

$query = "SELECT DoctorName, Speciality FROM hospital WHERE HospitalName = '".$hosname."'";

在将其插入查询之前,您还应该使用mysql_real_escape_string()转义医院名称。

答案 3 :(得分:2)

我假设$ hosname是一个字符串。您的查询失败,因为您没有引用它。

$query = "SELECT DoctorName, Speciality FROM hospital 
   WHERE HospitalName = '" . mysql_real_escape_string($hosname) . "'";

注意我添加了mysql_real_escape_string以及引号以防止SQL注入攻击。您应该阅读并了解SQL注入攻击,因为您的代码容易受到攻击。还可以考虑使用PDO来帮助您处理这些事情。

答案 4 :(得分:1)

'变量名称周围使用.$hosname(引号)。