2015-09-03 17 views
-1

我收到下面顯示的以下mysql_error()消息。我不時得到它,只要回頭看看我的語法就可以發現它們。如何解決mysql_error()?

您的SQL語法錯誤;檢查 對應於你的MySQL服務器版本使用 附近「鍵,標籤,值,描述,LAST_MODIFIED,用戶名, 文件路徑,DIVID)SELE」在行1

但現在正確的語法手冊我有一個我似乎無法解決的錯誤,所以我開始提出一個相當簡單的問題。如何解釋mysql_error()消息具體來說,當它說「接近」時。

  • 附近是什麼?
  • 我在哪裏看?

    • 在查詢語句的前端和它的前面嗎?
    • 或者查詢語句的後端和它後面的那個?

這裏是我的實際查詢語句在PHP中:

mysqli_query($link, ' 
    INSERT INTO ' . DATASTORE . '(key, label, value, description, last_modified, username, filepath, divid) 
    SELECT key, label, "' . $new_value . '", description, "' . $last_modified .'", "' . $authorized_username .'", "' . $new_filepath .'", "' . $target_divid .'" 
    FROM ' . DATASTORE . ' 
    WHERE divid = "' . $source_divid . '" 
') or die(mysqli_error($link)); 
+0

你檢查每一個。變量值? –

+0

是的,我做了@Jezzabeanz。表列都是文本字段,變量都填充了字符串文本。那麼你是否推斷我需要查看查詢的SELECT側以及它後面的查找語句的實際語法錯誤? –

+0

我會查詢查詢的INSERT端。我一直恨MySQL錯誤。當我看着你的錯誤,它讓我覺得「好吧,所以它在'關鍵''''你的Datastore非空,僅文本? –

回答

1

我想這是因爲你的「鑰匙」字段,它是SQL關鍵字的使用「」或``引用的那場

mysqli_query($link, ' 
INSERT INTO ' . DATASTORE . '(\'key\', label, value, description, last_modified, username, filepath, divid) 
SELECT \'key\', label, "' . $new_value . '", description, "' . $last_modified .'", "' . $authorized_username .'", "' . $new_filepath .'", "' . $target_divid .'" 
FROM ' . DATASTORE . ' 
WHERE divid = "' . $source_divid . '"') or die(mysqli_error($link)); 
+0

不應該是反引號而不是單引號嗎? –

+0

啊輝煌@ Perl99。我無法計算我使用預留的MySQL關鍵字絆倒的次數。看起來這是另一個這樣的時代。我碰巧正在追查一個真正不是*語法*錯誤的錯誤......這是我使用某個保留的列名稱。我會對其進行測試併發回並選擇此作爲答案。謝謝! –

+0

它的工作。一旦我在查詢語句中的INSERT和SELECT行中的列*鍵*周圍反作用,它就起作用了!再一次,我被一個保留的MySQL關鍵字絆倒了。啊。 –

1

如果只有它是那麼容易......我想只有如此多的信息的MySQL可以給你。我的建議是僅僅使用該信息作爲指導錯誤的地方。

我會使用一個調試器或只是回聲SQL出來,然後使用像SQLyog數據庫工具來運行查詢。 SQLYog(或類似的東西)可以格式化查詢,使其更具可讀性。該錯誤可能是任何錯誤,無法正確關閉支架。

就像一切,它只是伴隨着練習。

+0

是的,我知道但是我永遠無法知道的是當它說「接近」時。 ..在***之前是否意味着***,或***之後是***還是可能*** ***? –

1

您的錯誤出現在DATASTORE值中。當你看到mysql說「接近」時,意味着之前。因此,看看發生錯誤時DATASTORE的價值。嘗試回顯查詢,而不是執行查看它看起來如何,你會得到錯誤。 在你的情況的錯誤是沒有DATASTORE和( 此外之間的空間,Perl和其他指出,你有反引號的關鍵,因爲它是MySQL

所以編輯您的查詢這樣的保留字它應該工作:

mysqli_query($link, ' 
    INSERT INTO ' . DATASTORE . ' (`key`, label, value, description, last_modified, username, filepath, divid) 
    SELECT `key`, label, "' . $new_value . '", description, "' . $last_modified .'", "' . $authorized_username .'", "' . $new_filepath .'", "' . $target_divid .'" 
    FROM ' . DATASTORE . ' 
    WHERE divid = "' . $source_divid . '" 
') or die(mysqli_error($link)); 
+0

謝謝@LelioFaieta。它實際上是MySQL通知我的錯誤消息的一部分。 –

+0

很高興你解決了你的問題 –