2012-12-11 49 views
-3

無效的SQL語句。你的SQL語法有錯誤;檢查對應於你的MySQL服務器版本正確的語法附近使用手冊「牧師押沙龍達維的.A傳。‘’ORDER BY nmc_cd.CDTitle」第5行如何通過傳遞值從PHP顯示數據?

$CDTitle = $_REQUEST['CDTitle']; // make sure its only an id (SQL Incjection problems) 
    $sql = "SELECT nmc_cd.CDTitle, nmc_cd.CDYear, nmc_cd.CDPrice, nmc_category.catDesc, nmc_publisher.pubName 
FROM nmc_cd 
NATURAL JOIN nmc_category 
NATURAL JOIN nmc_publisher 
WHERE nmc_cd.CDTitle = '$CDTitle' 
ORDER BY nmc_cd.CDTitle 
LIMIT 0 , 30"; 
+0

這是很清楚你的問題是什麼目前 – hoppa

+0

什麼是$ CDTitle價值? 您可以輸入最後一個查詢,插入$ CDTitle嗎? –

+0

它看起來像'$ CDTitle'的注入正在破壞他的SQL語句的語法。 – Dai

回答

4

它看起來像$CDTitle中有一個',這是在工程扔扳手。

至少,你應該通過mysql_real_escape_string()運行$CDTitle。這將有助於防止SQL注入攻擊(以及防止這些更常見的錯誤)。

然而,強烈建議使用PDO和準備的語句,因爲它們基本上更可靠。

只是爲了澄清,簡單的方法來解決它是簡單地將其替換您的第一行:

$CDTitle = mysql_real_escape_string($_GET['CDTitle']); 

雖然你真的應該看看在使用PDO和準備語句。起初他們看起來有點嚇人,但一旦你開始使用它們,你會發現它們並沒有太大的不同,但更安全。

0

重寫它像這樣

$CDTitle = $_REQUEST['CDTitle']; // make sure its only an id (SQL Incjection problems) 
    $sql = "SELECT nmc_cd.CDTitle, nmc_cd.CDYear, nmc_cd.CDPrice, nmc_category.catDesc, nmc_publisher.pubName 
FROM nmc_cd 
NATURAL JOIN nmc_category 
NATURAL JOIN nmc_publisher 
WHERE nmc_cd.CDTitle = '".mysql_real_escape_string($CDTitle)."' 
ORDER BY nmc_cd.CDTitle 
LIMIT 0 , 30";