【问题标题】:Insert arrays elements into database fields MYSQL将数组元素插入数据库字段MYSQL
【发布时间】:2014-12-26 17:40:28
【问题描述】:

我有一个名为“customers”的数据库和五个名为 name、address、city、cap、country 的数组。在我的数据库中,我想创建 10 条记录,其中包含有关每个客户的信息。使用我的代码,所有数据都插入到数据库中,但首先插入了所有名称、所有地址等,所以我得到了 50 条记录而不是 10 条。我该如何解决?

    <?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();
?>

【问题讨论】:

    标签: php mysql database mysqli insert


    【解决方案1】:

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

    2) 使用 SINGLE 循环和 SINGLE 查询:

    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 持开放态度。

    【讨论】:

    • 再次。一次连接到数据库。每次运行循环时,您都在连接。这太疯狂了。并且[key][$key] 不同
    • 已修复。我仍然得到很多“未定义的变量”和“未初始化的字符串偏移量:”
    【解决方案2】:

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

    试试这个:

    $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();
    

    如果我可以给你一个提示:像这样在一个多维数组中组织你的数据:

    $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...
    );
    

    更易于维护和操作。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-05
        • 1970-01-01
        • 2011-12-24
        • 2016-07-05
        • 1970-01-01
        • 2011-07-05
        • 1970-01-01
        相关资源
        最近更新 更多