从外部选择框传递值时无效的MySQL查询
我有两个文件在使用。第一个是前端选择框,其中包含动态填充的字符/文本值列表,使用POST将选定值发送到后端文件。这个后端文件此值分配给变量和变量然后在下面的查询中使用:从外部选择框传递值时无效的MySQL查询
$query = "SELECT DoctorName, Speciality FROM hospital WHERE HospitalName =".$hosname;
然而,我不断收到无效查询消息我在我的设定或死亡();我不知道为什么。 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);
注:我已经检查了从选择框中的值在使用打印传递,它是。任何帮助将不胜感激。
*我只能在本地,但感谢你的周围可变.$hosname
名测试该所有谁推荐mysql_real_escape_string(),以防止注射。*
你想会是这样产生的SQL查询;
SELECT DoctorName, Speciality FROM hospital WHERE HospitalName = 'MyHospital'
换句话说,您需要为您的查询创建添加引号;
$query = "SELECT DoctorName, Speciality FROM hospital WHERE HospitalName = '".$hosname."'";
在将其插入查询之前,您应该使用mysql_real_escape_string()确实逃脱医院名称。
啊哇,这样一个愚蠢的错误,使。感谢您对mysql_real_escape_string()的支持。 – 2012-02-28 18:49:19
使用'
(引号)。
其实,你的错误是你需要包围单引号喜欢你的变量:
$query = "SELECT DoctorName, Speciality FROM hospital WHERE HospitalName ='".$hosname."'";
我假设$ hosname是一个字符串。您的查询失败,因为您没有引用它。
$query = "SELECT DoctorName, Speciality FROM hospital
WHERE HospitalName = '" . mysql_real_escape_string($hosname) . "'";
注意我添加了mysql_real_escape_string
以及防止SQL注入攻击的引号。您应该阅读并了解SQL注入攻击,因为您的代码易受攻击。还可以考虑使用PDO,它可以帮助您处理这些事情。
看起来您并未将值包含在引号中,因此查询格式不正确。我的PHP是生锈的,原谅我,如果有在我的例子语法错误,如下:
$query = "SELECT DoctorName, Speciality FROM hospital WHERE HospitalName ='".$hosname ."';";
然而,字符串连接让你对SQL注入开放(http://en.wikipedia.org/wiki/ SQL_injection)。考虑使用准备好的语句http://php.net/manual/en/pdo.prepare.php
尝试在die消息中添加'mysql_error()'。我们来看看抛出了什么错误。 – James 2012-02-28 18:23:13
你是否尝试过从MySQL命令行客户端完全相同的查询? – Karlson 2012-02-28 18:24:25
看看什么是'sql注入' – mkk 2012-02-28 18:26:49