2014-10-30 61 views
0

我有一个名为'customers'的数据库和名为name,address,city,cap,country的五个数组。在我的数据库中,我想创建10条记录,其中包含有关每个客户的信息。用我的代码,所有的数据都保存到数据库中,但是首先插入所有名称,所有地址等等,所以我得到了50条记录,而不是10条。我该如何修复它?在数据库字段中插入数组元素MYSQL

<?php 

$name = array('Alfreds Futterkiste','Ana Trujillo Emparedados','Antonio Moreno Taqueria','Around the Horn','Berglunds snabbkop','Blauer See Delikatessen','Blondel pere et fils ','Bolido Comidas preparadas','Bon app','Bottom-Dollar Marketse'); 

$address = array('Obere Str. 57','Avda. de la Constitucion 2222','Mataderos 2312','120 Hanover Sq.','Berguvsvagen 8','Forsterstr. 57','24, place Kleber','C/ Araquil, 67','12, rue des Bouchers','23 Tsawassen Blvd'); 

$city = array('Berlin','Mexico D.F.','Mexico D.F.','London','Lulea','Mannheim','Strasbourg','Madrid','Marseille','Tsawassen'); 

$cap = array('12209','05021','05023','WA1 1DP','S-958 22','68306','67000','28023','13008','T2F 8M4'); 

$country = array('Germany','Mexico','Mexico','UK','Sweden','Germany','France','Spain','France','Canada'); 

$conn= mysqli_connect('127.0.0.1','root','','preesame') or die("Connection failed: " . $conn->connect_error); 

foreach ($name as $key=>$value) 
{ 
$namess = mysqli_real_escape_string($conn,$value); 
$addressess = mysqli_real_escape_string($conn,$addresses); 
$citiess = mysqli_real_escape_string($conn,$cities); 
$capss = mysqli_real_escape_string($conn,$caps); 
$countriess = mysqli_real_escape_string($conn,$countries); 
$insert = mysqli_query($conn,"INSERT INTO customers (id,name,address,city,cap,country) VALUES ('',$namess[$key],$addressess[$key],$citiess[$key],$capss[$key],$countriess[$key])"); 
} 

$conn->close(); 
?> 
+0

有没有进一步的帮助? – Antonio102 2014-10-31 10:36:31

回答

0

因为您正在每个数组上循环,并插入所有数组。

试试这个:

$name = array('Alfreds Futterkiste', 'Ana Trujillo Emparedados', 'Antonio Moreno Taqueria', 'Around the Horn', 'Berglunds snabbkop', 'Blauer See Delikatessen', 'Blondel pere et fils ', 'Bolido Comidas preparadas', 'Bon app', 'Bottom-Dollar Marketse'); 
$address = array('Obere Str. 57', 'Avda. de la Constitucion 2222', 'Mataderos 2312', '120 Hanover Sq.', 'Berguvsvagen 8', 'Forsterstr. 57', '24, place Kleber', 'C/ Araquil, 67', '12, rue des Bouchers', '23 Tsawassen Blvd'); 
$city = array('Berlin', 'Mexico D.F.', 'Mexico D.F.', 'London', 'Lulea', 'Mannheim', 'Strasbourg', 'Madrid', 'Marseille', 'Tsawassen'); 
$cap = array('12209', '05021', '05023', 'WA1 1DP', 'S-958 22', '68306', '67000', '28023', '13008', 'T2F 8M4'); 
$country = array('Germany', 'Mexico', 'Mexico', 'UK', 'Sweden', 'Germany', 'France', 'Spain', 'France', 'Canada'); 

$conn = mysqli_connect('127.0.0.1', 'root', '', 'preesame') or die("Connection failed: " . $conn->connect_error); 

$i = 0; 
foreach ($name as $names) { 
    $sql = "INSERT INTO customers (name,address,city,cap,country) " 
      . "VALUES ('".mysqli_real_escape_string($link, $names[$i])."'," 
      . "'".mysqli_real_escape_string($link, $address[$i])."'," 
      . "'".mysqli_real_escape_string($link, $city[$i])."'," 
      . "'".mysqli_real_escape_string($link, $cap[$i])."'," 
      . "'".mysqli_real_escape_string($link, $country[$i])."')"; 
    $insert = mysqli_query($conn, $sql); 
    $i++; 
} 
$conn->close(); 

,如果我能suggesst你一个小窍门:组织多维数组这样的数据是这样的:

$persons = array(
    array('name' => 'Alfreds Futterkiste', 'address' => 'Obere Str. 57', 'city' => 'Berlin', 'cap' => 12209, 'country' => 'Germany'), 
    array('name' => 'Ana Trujillo Emparedados', 'address' => 'Avda. de la Constitucion 2222', 'city' => 'Mexico D.F.', 'cap' => 05021, 'country' => 'Mexico'), 
    //more person here... 
); 

更容易maintaine和操纵。

1

1)连接到数据库ONCE。您不必每次在每个循环

2)使用环的连接,以及查询:

foreach ($name as $key => $value) { 
    $sql = "INSERT ... (id, name, address, foo, bar, baz) VALUES ('', $value, $addresses[$key], $foo[$key], $bar[$key], etc...)"; 
    ... run query here 
} 

3)阅读并了解sql injection attacks因为你'开放获取你的服务器pwn3d。

+0

我只是更新上面的代码,但它不能再工作 – Antonio102 2014-10-30 15:49:42

+0

。连接到数据库ONCE。你连接每一次你运行循环。这太疯狂了。和'[key]'不一样''[$ key]' – 2014-10-30 15:56:15

+0

固定。我仍然收到很多'未定义的变量'和'未初始化的字符串偏移:' – Antonio102 2014-10-30 16:00:47

0

您应该只有一个循环。编写for循环并使用索引/计数器访问数组中的值。类似这样的:

for ($i = 0, $i < 10, $i++) { 
//insert using index $name[$i], $address[$i] etc. 
}