2013-01-15 90 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