2013-02-01 95 views
0

許多類似於我的帖子,他們都沒有工作。PHP數組插入MySQL失敗

有一個數組$data['date'], $data['name'], $data['value']

試圖插入MySQL表MyValues(日期,名稱,值)

試過7-8不同的方法,沒有工作。 想類似

for ($a=0;$a<10;$a++) { 
    mysql_query("INSERT INTO MyValues('Date','Index_Name','Index') 
     VALUES ($data['date'][$a] ,$data['name'][$a], $data['value'][$a])" 
} 

也有嘗試過的foreach,構建一個字符串給到MySQL等

得到這個錯誤 警告:mysql_error()預計參數1是資源,鑑於布爾在線45

+2

[**在新的代碼,請不要使用'mysql_ *'功能**](HTTP: //bit.ly/phpmsql)。他們不再被維護[並被正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。如果您選擇PDO, [這裏是一個很好的教程](http://stackoverflow.com/a/14110189/1723893)。 –

+0

你會得到什麼錯誤? – j08691

+0

有一個名爲Values的表真的合法嗎? – span

回答

0

由於Values是一個保留字,因爲是表名,你不能使用它。您必須使用反引號將其括起來。同樣,使用單引號來命名列是無效的,您也需要反引號。

試試這個:

$out = Array(); 
$esc = "mysql_real_escape_string"; 
foreach($data['date'] as $k=>$v) { 
    $out[] = "('".$esc($data['date'][$k])."', '".$esc($data['name'][$k])."', " 
     ."'".$esc($data['value'][$k])."')"; 
} 
mysql_query("INSERT INTO `Values` (`Date`, `Index_Name`, `Index`) values ".implode(",",$out)); 
+0

編輯我的回答 –

+0

我想你剛纔已經證明了爲什麼使用'mysql_query'是一個非常糟糕的主意。雖然聰明,但這是一個巨大的混亂。 – tadman

+1

Thanx Kolink。這工作。 – user2033337

-1

首先,只需使用PDO/mysqli與準備語句,所以你不會有這樣的問題。

這將解決這個問題,但(列名與後臺蜱,而不是單引號和轉義的數據):

for ($a=0;$a<10;$a++) { 
    mysql_query("INSERT INTO `Values` (`Date`,`Index_Name`,`Index`) 
     VALUES ('".mysql_real_escape_string($data['date'][$a])."' , 
'".mysql_real_escape_string($data['name'][$a])."', 
'".mysql_real_escape_string($data['value'])[$a]."'"); 
} 

,並儘量避免爲你列像indexvalues保留名稱。

+0

我的回答有什麼問題? –

3

columnName不應該用單引號包裝,因爲它們是標識符而不是字符串文字。

INSERT INTO `Values` (Date,Index_Name,Index) VALUES (....) 

一兩件事,在這裏,需要將包裝與反引號唯一的標識符是表名VALUES,因爲它是一個保留關鍵字。

作爲旁註,查詢是用SQL Injection脆弱,如果變量的值(小號)從外部來了。請看下面的文章,瞭解如何防止它。通過使用PreparedStatements你可以擺脫使用單引號圍繞值。

+1

您的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以獲取在第1行'值(日期,索引名稱,索引)VALUES'附近使用的正確語法 –

+1

^已解決問題。 Downvote刪除。 –

+0

@Kolink我忽略了它。謝謝 –

-1

首先,我相信你想你的查詢值引用,所以結果是「價值」,而不僅僅是價值。例如:

mysql_query("INSERT INTO Values(Date,Index_Name,Index) VALUES ('$data['date'][$a]' ,'$data['name'][$a]', '$data['value'][$a]'); 

如果你正在做多個查詢,這樣做:

$q = "INSERT INTO Values(Date,Index_Name,Index) VALUES "; 
for { 
    // Add to the string here for each insert item 
} 
mysql_query($q); 

此外,請開始逐步淘汰PHP的mysql_ *圖書館贊成的mysqli或PDO的。

+0

我剛纔意識到你把值的表名稱。你爲什麼要命名一個表值?據我所知,這是MySql中的一個保留字。如果一切都失敗,請嘗試更改表的名稱。 –

+0

你爲什麼不投票給大家?當然,我們可能不會在銀盤上遞交代碼,但請至少說明爲什麼我們拒絕了投票,所以我們可以嘗試解決它們... –

+0

抱歉,noob。擊中錯誤的按鈕 - >投票。不是故意的!對不起 – user2033337

-2

這工作:

for ($a=0;$a<10;$a++) { 
    mysql_query("INSERT INTO Values('Date','Index_Name','Index') 
    VALUES ('".$data['date'][$a]."','".$data['name'][$a]."','".$data['value'][$a]."')" 
} 
+0

您的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以獲得在第1行的「值(日期,索引名稱,索引)值」附近使用的正確語法 –

+0

這甚至不足以解決問題。爲什麼人們總是認爲這是字符串插值問題?不是。 – tadman

0

試試這個,使用$a++$ee++

for ($a=0;$a<10;$a++) { 
mysql_query("INSERT INTO `Values` (`Date`,`Index_Name`,`Index`) 
    VALUES ('".$data['date'][$a]."' ,'".$data['name'][$a]."', '".$data['value'][$a]."' ") 
} 
+0

關閉,但*仍*錯誤... –