2013-07-02 122 views
0

我已經向mysql數據庫發送了很多查詢,所以當這個停止工作時,它讓我投入了一個循環。我只是想插入文本和int和小數信息。語法錯了嗎?它會拋出這個錯誤消息,但我不知道它是什麼意思!php/mysql:向mysql數據庫發送查詢時出錯

ERRORMESSAGE:

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 'long) VALUES (jpeg.jpg,1410700,image/jpeg,1372713379,42.978852222222,-86.0356041' at line 1 

名稱,類型,日期時間表中的列是VARCHAR

大小爲int

lat和長是小數(14,12)和(15,12)

我已經嘗試了很多不同的查詢變體來嘗試發送它到我的localhost wampserver。如果你看到我錯過的東西,請告訴我。謝謝!

$conn = mysqli_connect("localhost", "root", "password", "databaseimage") or die('Error Connecting.'); 
$sql = "INSERT INTO `images` (name,size,type,datetime,lat,long) VALUES ($imageName,$imageSize,$imageType,$datetime,$lat,$long)"; 
if(mysqli_query($conn, $sql)) { 
    echo "Added to database successfully!"; 
} else { 
    echo "Error sending query!"; 
    printf("\nErrormessage: %s\n", mysqli_error($conn)); 
} 

我試過了,沒有``標記。 我試過用每個變量的單引號。 我試過只是發送原始數據,它仍然出錯。

+0

好吧,嘗試在字符串變量上添加單引號,例如:VALUES('$ imageName',$ imageSize,'$ imageType'等。) –

+2

問題出在'long'上 –

+0

您應該真的使用預處理語句在您的sql語句中注入變量(未加引號)。 – jeroen

回答

0

查詢應該像

$sql = "INSERT INTO `images` (name,size,type,datetime,lat,`long`) VALUES ('$imageName',$imageSize,'$imageType','$datetime',$lat,$long)"; 
4

LONG是一個MySQL的保留字:修復它來包裝這些話在反引號 http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html

方式一:

INSERT INTO `images` (name,size,type,datetime,lat,`long`) VALUES ('$imagename'.... 

但如果可以的話,避免使用保留字作爲列名或表名是更好的做法 - 正如你發現的那樣,它會導致奇怪的情況這個。

+0

非常感謝! – matt

+0

我做了你所說的並得到了這個... Errormessage:'字段列表'中的未知列'jpeg.jpg' – matt

+0

你還需要圍繞列值使用單引號 - 我已經更新了答案。儘管如此,你應該考慮轉向mysqli_ *或PDO。兩者都將幫助您編寫更安全的SQL。 – andrewsi