2013-11-21 126 views
-1

將PHP變量添加到MySQL字符串的正確語法究竟是什麼?在MySQL查詢字符串中使用PHP變量WHERE子句

這是我的查詢:

"SELECT cd.SectionID, cd.CompanyName, cd.ShowOnSite, cd.LiveDate, cd.EndDate, cds.SiteID, s.SiteName 
    FROM CompanyDirectory cd 
    LEFT JOIN CompanyDirectorySections cds ON cd.SectionID = cds.SectionID 
    LEFT JOIN Sites s ON cds.SiteID = s.SiteID 
    WHERE s.SiteID = " . $id . " AND cd.ShowOnSite = 'y' 
    ORDER BY cd.EndDate DESC" 

但它拋出如下:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND cd.ShowOnSite = 'y' ORDER BY cd.EndDate DESC' at line 5

我自己也嘗試WHERE s.SiteID = $idWHERE s.SiteID = '" . $id . "'但無濟於事。前者給出了一個空白屏幕,而後者給出了前述的錯誤。該變量是一個整數。

我已經嘗試了phpMyAdmin中的查詢,並且它完美地工作,將該變量替換爲實際的ID。

注意:如果它很重要,則在查詢前通過$id = $_POST['id'];從表單中收到$id,然後剝離並轉義。

謝謝。

+0

什麼是$ id的值? – aderuwe

+2

你打開自己的sql注入。請學習使用準備好的語句。 – Saturnix

+0

'$ id'目前是1到20之間的整數,但可能無限增加。 – mpdc

回答

2

如果MySQL是說附近有一個錯誤「AND cd.ShowOnSite =‘Y’」,這通常意味着有它面前無堅不摧的問題 - 在這種情況下,的$ id

你能打印出你的PHP文件中的查詢嗎?這可能會告訴你,$ id實際上是空白的,這將使查詢看起來像「WHERE s.SiteID = AND cd.ShowOnSite ='y'」。

如果它是空白的,那麼在你的MySQL代碼之前你需要整理出來的值顯然是有問題的。

+0

謝謝!由於'$ id'是一個整數,我不應該使用'stripslashes()'或'mysql_real_escape_string()'。刪除這些,並按預期工作。在查詢之前回應'$ id'導致這個結論。 – mpdc