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