2013-01-15 125 views
0

我想插入一個數組到MySQL使用PHP。我遵循這裏給出的優秀建議來使用implode命令,它對於一個數組非常有用,但是這個似乎正在死亡。這個數組與另一個稍有不同,但我不知道如何解釋這個差異。插入數組到MySQL與PHP

這裏是我的代碼:

$sql = array(); 
foreach($ride_detail as $row) { 
    $sql[] = '('.$row['id'].', "'.mysql_real_escape_string($row['name']).'", 
    "'.$row['version'].'")'; 
} 
mysql_query('INSERT IGNORE INTO ride (ride_id, name, version) VALUES '.implode(',', $sql)); 

我一遍又一遍地得到這個消息。

Warning: Illegal string offset 'id' in ride_details.php on line 60 

Warning: Illegal string offset 'name' in ride_details.php on line 60 

Warning: Illegal string offset 'version' in ride_details.php on line 61 

我的陣列(使用的print_r)的含量是:

陣列([ID] => 21570117 [名稱] =>夜騎下班回家[start_date_local] => 1347302039 [ELAPSED_TIME ] => 53:56 [moving_time] => 52:04 [distance] => 12.6 >> [average_speed] => 14.5 [elevation_gain] => 474 [location] => Englewood,CO [start_latlng] => Array([ 0] => 39.547792011872 [1] => -104.86300536431)[end_latlng] =>陣列([0] => 39.655485888943 [1] => -104.88656991161)[version] => 1355428869 [athlete] => id] => 832001 [name] => Bob Kratchet [username] => bob_kratchet)[bike] => Array([id] => 281303 [name] => Giant Allegre commut ER)[maximum_speed] => 29.3卡路里] => 372> [average_power] => 107 [下班] => 1)

我是一個完整的noob ...

+6

[**請不要用'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://j.mp/PoWehJ)。 – Kermit

+0

是print_r($ row)還是print_r($ ride_detail)? – 2013-01-15 23:44:26

+0

另一條建議 - 如果您想在查詢中使用調用中的信息,在不同的表中存在多行 - 在任何字段中存儲多條數據都會讓您陷入背後遲早。您應該閱讀[數據規範化](http://databases.about.com/od/specificproducts/a/normalization.htm) – Basic

回答

1

由於您$ride_detail是隻有一個數組,$row21570117(整數),Night ride home from work(字符串),依此類推。代碼然後嘗試獲取每個元素的id密鑰,然後嘗試獲取name密鑰等,從而生成一個錯誤消息的錯誤消息。

它看起來像你打算有$ride_detail是一個數組的數組,或者你根本不想要一個foreach循環。

+0

是的,正確的。有23個值,但對於我的概念驗證,我只想將3個值導入到一行中。如果我準備行,我必須導入每個值?我如何繞過它試圖爲每個元素獲取一個id,因爲它仍然是一個數組?我是一個完整的noob。 – user1981967

0

試試這個

foreach($ride_detail as $row) { 
    $sql = array($row['id'], mysql_real_escape_string($row['name']), $row['version']) ; 

     } 
    mysql_query('INSERT IGNORE INTO ride (ride_id, name, version) VALUES ($sql[0] ,$sql[1] , $sql[2]) '); 
+0

謝謝,昨晚我只是在讀,我不應該再使用mysql_了。不幸的是,我正在通過w3schools和tizag學習使用哪種方法。我會嘗試切換到PDO,你有這樣的例子嗎? – user1981967