【问题标题】:Insert array into db table将数组插入数据库表
【发布时间】:2017-07-10 04:21:15
【问题描述】:

我正在尝试学习如何使用数组将多个条目插入到数据库表中。这是我的尝试。我做错了什么?

$servername = "localhost";
$username = "#";
$password = "#";
$dbname = "hosts";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$client = array(
    "1" => array("Jerry Garcia", "193.169.5.11"),

    "2" => array("Bill Graham", "193.169.5.12"),

    "3" => array("Arlo Guthrie", "193.169.5.13")
     );

if(is_array($client) {
    $DataArr = array();
    foreach($client as $row) {
        $fieldVal1 = mysqli_real_escape_string($client[$row][1]);
        $fieldVal2 = mysqli_real_escape_string($client[$row][2]);
        $fieldVal3 = mysqli_real_escape_string($client[$row][3]);

        $DataArr[] = "('fieldVal1', 'fieldVal2', 'fieldVal3')";

    }

    $sql = "INSERT INTO ip_data (field1, field2, field3) values ";
    $sql .= implode(',' , $DataArr);

    mysqli_query($conn, $query);
}

我试过了,但还是不行。我错过了什么?

$servername = "localhost";
$username = "#";
$password = "#";
$dbname = "hosts";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$client = array(
    "0" => array("Jerry Garcia"),

    "1" => array(""193.169.5.11"),
     );

if(is_array($client)) {
    $DataArr = array();
    foreach($client as $row) {
        $fieldVal1 = mysqli_real_escape_string($client[$row][0]);
        $fieldVal2 = mysqli_real_escape_string($client[$row][1]);


        $DataArr[] = "('$fieldVal1', '$fieldVal2')";

    }

    $sql = "INSERT INTO ip_data (field1, field2) values ";
    $sql .= implode(',' , $DataArr);

    mysqli_query($conn, $query);
}

感谢您的建议。

下次尝试。

$servername = "localhost";
$username = "#";
$password = "#";
$dbname = "hosts";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$client = array(
    "0" => array("name" => "Peter Maxx", "ip" => "193.169.5.16"),
    "1" => array("name" => "Ravi Shankar", "ip" => "193.169.5.17")
     );

if(is_array($client)) {
        $DataArr = array();         
        foreach($client as $row) {

            $DataArr[] = "('". mysqli_real_escape_string($conn, $row[0]) ."', '". mysqli_real_escape_string($conn, $row[1]) ."')";
        }
        $sql = "INSERT INTO ip_data (name, ip)
VALUES 
( 'Peter Maxx', '193.169.5.16'),
('Ravi Shankar', '193.169.5.17')";
        $sql .= implode(", " , $DataArr);
        mysqli_query($conn, $sql);  

}

我收到这些错误消息。

PHP Notice:  Undefined offset: 0 in php shell code on line 5
PHP Notice:  Undefined offset: 1 in php shell code on line 5
PHP Notice:  Undefined offset: 0 in php shell code on line 5
PHP Notice:  Undefined offset: 1 in php shell code on line 5

【问题讨论】:

标签: php mysql arrays database


【解决方案1】:

不清楚您的目的是什么,因为您的问题中的 SQL 查询指定了 3 个字段(field1、field2、field3)要插入到您的表中,但您的 clients 数组中只有 2 个值。如果您想在一个查询中插入多行,假设您的客户端数组中的“名称”和“IP”值,您可以这样做:

    if(is_array($client)) {
        $DataArr = array();         
        foreach($client as $row) {
            //CREATE ARRAY WITH name AND ip VALUES FOR EACH USER...               
            $DataArr[] = "('". mysqli_real_escape_string($conn, $row[0]) ."', '". mysqli_real_escape_string($conn, $row[1]) ."')";
        }
        $sql = "INSERT INTO ip_data (name, ip) VALUES ";
        $sql .= implode(", " , $DataArr);
        mysqli_query($conn, $sql);
    }

$sql 变量将包含以下符合多重插入语法的查询:

INSERT INTO ip_data (name, ip) 
VALUES ('Jerry Garcia', '193.169.5.11'), 
       ('Bill Graham', '193.169.5.12'), 
       ('Arlo Guthrie', '193.169.5.13')

请注意,您的问题中有 $query 而不是 $slq。应该是:mysqli_query($conn, $sql);

另一件事:使用mysqli_real_escape_string() 程序方式而不是object oriented way,如您的示例所示,需要将链接标识符作为参数传递给连接:mysqli_real_escape_string($conn, $row[0])

更新: 在您最近的尝试中,您已将数组更改为关联数组,因此应该这样做:

 $servername = "localhost";
 $username = "#";
 $password = "#";
 $dbname = "hosts";

 $conn = new mysqli($servername, $username, $password, $dbname);

 if ($conn->connect_error) {
     die("Connection failed: " . $conn->connect_error);
 }
 $client = array(
     "0" => array("name" => "Peter Maxx", "ip" => "193.169.5.16"),
     "1" => array("name" => "Ravi Shankar", "ip" => "193.169.5.17")
 );

 if(is_array($client)) {
    $DataArr = array();         
    foreach($client as $row) {

        $DataArr[] = "('". mysqli_real_escape_string($conn, $row["name"]) ."', '". mysqli_real_escape_string($conn, $row["ip"]) ."')";
    }
    $sql = "INSERT INTO ip_data (name, ip) VALUES ";
    $sql .= implode(", " , $DataArr);
    mysqli_query($conn, $sql);  

 }

【讨论】:

  • 非常感谢迈克尔!这看起来不错。回到办公桌后,我将立即进行这些编辑。非常感谢!
  • 嗨,迈克尔。显然,我仍然做错了什么。请参阅我上面的编辑。
  • @S.VanTuyl 您将数组更改为关联数组,因此只需将$row[0] 更改为$row["name"]$row[1] 更改为$row["ip"] 我已经用一个工作示例更新了我的答案..
  • 宾果游戏!非常感谢您的耐心等待!
【解决方案2】:

正确

来自

   if(is_array($client) {

收件人

   if(is_array($client)){

您的数组 $client 在每次迭代中只有 2 个元素

来自

    # You will get PHP Warning:  Illegal offset type
    # since $row is already array

    $fieldVal1 = mysqli_real_escape_string($client[$row][1]);
    $fieldVal2 = mysqli_real_escape_string($client[$row][2]);
    $fieldVal3 = mysqli_real_escape_string($client[$row][3]);

    // For first iteration 
    // $row[0] = "Jerry Garcia"
    // $row[1] = "193.169.5.11"

    $fieldVal1 = mysqli_real_escape_string($conn, $row[0]);
    $fieldVal2 = mysqli_real_escape_string($conn, $row[1]);

    // $row[3] does not exists so comment it and set $fieldVal3 some data
    // $row[3] not exists in your array and even $row[2]
    // or add one value to your $client array and access using $row[2]
    // $fieldVal3 = mysqli_real_escape_string($row[3]);

    $fieldVal3 ='somedata';

最后

来自

 $DataArr[] = "('fieldVal1', 'fieldVal2', 'fieldVal3')";

收件人

 $DataArr[] = "('$fieldVal1', '$fieldVal2', '$fieldVal3')";

【讨论】:

  • @S.VanTuyl:我编辑了,请阅读您需要更正的地方
  • @S.VanTuyl:在您的最新编辑中,您可以看到 array("Jerry Garcia") 包含 1 个值,但您尝试插入 2 个值 "('$fieldVal1', '$fieldVal2')",这怎么可能?
  • 谢谢。我可以看到我需要做更多的学习才能掌握这个问题。很抱歉浪费了您的时间。
【解决方案3】:

请将附加到$DataArr[] 改为这个:

$DataArr[] = "('$fieldVal1', '$fieldVal2', '$fieldVal3')";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-19
    • 2013-11-30
    • 2021-01-12
    相关资源
    最近更新 更多