[英]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.