从外部选择框传递值时无效的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(),以防止注射。*

+0

尝试在die消息中添加'mysql_error()'。我们来看看抛出了什么错误。 – James 2012-02-28 18:23:13

+0

你是否尝试过从MySQL命令行客户端完全相同的查询? – Karlson 2012-02-28 18:24:25

+0

看看什么是'sql注入' – mkk 2012-02-28 18:26:49

你想会是这样产生的SQL查询;

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

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

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

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

+0

啊哇,这样一个愚蠢的错误,使。感谢您对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