2012-02-28 59 views
2

我有兩個文件在使用。第一個是前端選擇框,其中包含動態填充的字符/文本值列表,使用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

回答

2

你想會是這樣產生的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

1

使用'(引號)。

2

其實,你的錯誤是你需要包圍單引號喜歡你的變量:

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

我假設$ hosname是一個字符串。您的查詢失敗,因爲您沒有引用它。

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

注意我添加了mysql_real_escape_string以及防止SQL注入攻擊的引號。您應該閱讀並瞭解SQL注入攻擊,因爲您的代碼易受攻擊。還可以考慮使用PDO,它可以幫助您處理這些事情。

3

看起來您並未將值包含在引號中,因此查詢格式不正確。我的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