繁体   English   中英

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

[英]Invalid MySQL Query when passing in value from external select box

我有两个文件在使用中。 第一个是前端选择框,其中包含动态填充的字符/文本值列表,这些值使用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()来防止注射的人。*

看起来您没有将值包装在引号中,因此查询格式不正确。 我的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

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

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

您想要的结果SQL查询是这样的;

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM