2012-12-16 65 views
-2

我是PHP初學者。當我開始我的第一個SQL查詢時,我遇到了這個問題:MySQL SELECT錯誤

數據庫查詢頁面失敗:您的SQL語法有錯誤;檢查對應於你的MySQL服務器版本在線路附近使用「[」身份證「]}」正確的語法手冊1

還有就是我的SELECT命令:

$page_set = mysql_query(
    "SELECT * FROM pages WHERE subject_id = {[$subject'id']}", $connection 
); 

我檢查了所有我的數據庫表和一切都是正確的。此查詢工作:

$page_set = mysql_query("SELECT * FROM pages" ,$connection) 
+2

你的變量是完全畸形。外括號{}是正確的,但是內括號[]只能繞'id'。 – imkingdavid

回答

0

展望未來,構建您的查詢字符串在這樣一個單獨的變量:

$sql = "SELECT * FROM pages WHERE subject_id = {[$subject'id']}"; 

然後運行這樣的查詢:

$res = mysql_query($sql); 

如果你這樣做,你可以看到完全解析的查詢字符串,如下所示:

if (!$res) die("FAIL: $sql BECAUSE: " . mysql_error()); 

必須從mysql_query()測試結果值 - 它不是黑匣子;它會因爲你不能控制的原因而失敗。發生故障時,您需要識別它並處理錯誤狀況。

Siedbar注意:mysql擴展現在已被PHP棄用,所以您可能想爲您當前/將來的工作選擇PDO或MySQLi。

如果你是新來的PHP,這是一個非常偉大的書,以幫助您開始: http://www.sitepoint.com/books/phpmysql5/

+1

注意:{[$ subject'id']}應該是{$ subject ['id']} –

+0

@Ray:剛剛編輯:沒有必要的問候(甚至不鼓勵) – hakre

+0

@hakre:不確定我還沒有明白;我試圖向這個問題的作者展示如何檢測和可視化錯誤。關於給一條魚vs教如何釣魚的東西;-) –

2

嘗試這樣:

$page_set = mysql_query("SELECT * FROM pages WHERE subject_id = '" . $subject['id'] . "'", $connection); 

這假定id爲$主題數組,我猜在一個項目你要什麼在這裏。我不認爲你需要這些大括號「{」,但是你可能需要在where子句中的值附近引用單引號。

此外,如果這不工作,嘗試呼應的是,正在運行的SQL命令,你應該能夠看到這個問題(或您的問題發送SQL命令一樣)

+2

需要逃脫! – prodigitalson

+1

如果$ subject ['id']是一個整數,不要把它放在'和'中。 – imkingdavid

1

試試這個,

$page_set = mysql_query("SELECT * FROM pages WHERE subject_id = '" . $subject['id'] . "'", $connection); 

警告說,這個代碼與SQL Injection脆弱的,請閱讀下面的文章,以瞭解如何從中阻止,

+0

你不需要在{}中包裝$ subject ['id']嗎? – imkingdavid

+0

既然它是一個數組,他需要'{}',非? – prodigitalson

+0

哦,你編輯它,以便它不需要它們。沒關係。 – imkingdavid

0
$page_set = mysql_query("SELECT * FROM pages WHERE subject_id = {$subject['id']}", $connection); 
0

上述所有可以工作,但我更喜歡我自己最乾淨的方法可以是:

$page_set = mysql_query("SELECT * FROM pages WHERE subject_id = '".$subject['id']."'", $connection); 

還是我推薦給你,作爲一個初學者:

$subject_id = $subject['id']; 
$page_set = mysql_query("SELECT * FROM pages WHERE subject_id = '$subject_id'", $connection); 

我建議你使用我寫的第二種方法。這是最好和最乾淨的做法。

注意:請注意,mysql_擴展已正式折舊。 您應該使用mysqli或PDO。 (http://nl3.php.net/manual/en/function.mysql-query.php)

0

這不是你的SELECT命令。這是一個PHP的mysql_query命令。首先創建SQL,然後用它查詢數據庫:

$sql = "SELECT * FROM pages WHERE subject_id = {[$subject'id']}"; 
$page_set = mysql_query($sql, $connection); 

如果再碰上錯誤,你可以輸出$sql,並檢查它的樣子。與錯誤消息進行比較並修復您的SQL查詢構建。

如果您正在尋找一些靈感,該變量的輸出如何完成,see an existing answer

如果您使用PDO而不是棄用(長期過時,不再支持)功能,事情將變得更加容易。特別是參數化查詢將幫助您構建SQL命令,這些功能甚至不支持!

對於一個教程,請參閱:PDO Tutorial for MySQL Developers