2012-09-06 53 views
1

我正在使用此查詢來獲取MySQL語法錯誤(1064)。我一直在搜索幾十個關於SO的mysql語法問題,像瘋了一樣Google搜索,盯着這個SQL語句無濟於事。在執行語句之前,我使用了mysqli的real_escape_string()。我試過(在絕望中)從查詢中刪除所有換行符,但這沒有幫助。什麼導致了錯誤?帶INSERT語句的MySQL語法錯誤1064

INSERT INTO `file_upload`.`files` (
    `id`, 
    `name`, 
    `user_id` 
) 
VALUES (
    NULL, 
    'filename.txt', 
    1 
) 

是我得到的錯誤有消息:

...檢查對應於你的MySQL服務器版本使用附近的「\」 FILENAME.TXT正確的語法手冊\ '1)' 在行1

EDIT

這裏是PHP代碼。連接是一個mysqli對象。

public function add_file_to_user($file, $user_id) { 
    $query = "INSERT INTO `file_upload`.`files` (`id`,`name`,`user_id`) VALUES (NULL,'$file->name',$user_id)"; 
    $res = $this->query($query); 
    die($this->connection->errno . $this->connection->error); 
} 

private function query($str) { 
    $str = $this->connection->real_escape_string($str); 
    return $this->connection->query($str); 
} 
+0

您可以加入您使用的PHP代碼,也請? – andrewsi

+1

而你只在參數上使用'real_escape_string()'而不在整個字符串上使用,不是嗎? – andrewsi

+0

爲什麼你在這裏有單引號? '(NULL,'$ file-> name,$ user_id)' –

回答

3

你去那裏:

private function query($str) { 
    $str = $this->connection->real_escape_string($str); 
    return $this->connection->query($str); 
} 

你逃避你的整個查詢;你只需要逃避你傳遞給它的變量。

public function add_file_to_user($file, $user_id) { 
    $filename = $this->connection->real_escape_string($file->name); 

    $query = "INSERT INTO `file_upload`.`files` (`id`,`name`,`user_id`) VALUES (NULL,'$filename',$user_id)"; 
    $res = $this->query($query); 
} 

private function query($str) { 
    return $this->connection->query($str); 
} 

(雖然我沒有測試它,看看它的工作原理)

+0

就是這樣。謝謝。我會在一秒鐘內接受答案。 –

+0

不客氣 - 很高興有幫助。您還應該考慮爲查詢使用綁定參數 - 它們可以避免轉義變量,並且更安全。 – andrewsi

+0

感謝您的提示。我會研究它。 –

2

很可能你在某個時間點過度曝光。檢查代碼,這是而不是您正在執行的查詢。

我懷疑,而不是轉義字符串,你逃避你的整個查詢。

2

看着你的錯誤('\'filename.txt\',1)'),它似乎圍繞文件名的單引號被轉義導致這個錯誤被拋出。看起來你可能正在逃避你的INSERT查詢。

+1

以前是這樣的。我認爲你在*第一個反斜槓之前誤解了'*'* - 這只是查詢引用的片段。 –

2

嘗試:

$query = "INSERT INTO `file_upload`.`files` (`id`,`name`,`user_id`) VALUES (NULL,'$file->name',$user_id)"; 

$query = "INSERT INTO `file_upload`.`files` (`id`,`name`,`user_id`) VALUES (NULL,'$file->name','$user_id')";