【问题标题】:how to insert multiple array in mysql table如何在mysql表中插入多个数组
【发布时间】:2020-02-07 06:12:55
【问题描述】:

我试图在 mysql 表中插入数组...但我的代码不起作用

$File = 'testfile.csv';
$arrResult  = array();
$handle     = fopen($File, "r");
$row = 0;
if(empty($handle) === false) {
    while(($data = fgetcsv($handle, 1000, ";")) !== FALSE){
        $arrResult[] = $data;
        $num = count($data); //2100 resultats in my testfile
        $row++;
        if($row>1){ //ignore header line 
            for ($c=0; $c < $num; $c++) { //start loop
                $sql = '
                    INSERT INTO MyTable (name, class, level, ability) 
                    VALUES ("'.$data[0].'","'.$data[1].'","'.$data[2].'","'.$data[3].'")
                ';
                $Add=$db->query($sql);  
            }
        }
    }
    fclose($handle);
};

Mytable 中的结果:
1、Hero1、战士、65、活力;
2、Hero1、战士、65、活力;
3、Hero1、战士、65、活力;
4、Hero1、战士、65、活力;
...

【问题讨论】:

  • 这个结果有什么不正确的地方?你期待什么结果?
  • 为此使用准备好的语句。
  • 摆脱你的for循环,fgetcsv已经一次得到一行
  • @AlexBarker 这里是 testfile 的内容:Hero1;战士; 65;活力;英雄2;牧师; 32;魔法;英雄3;忍者; 78;逃脱;英雄4;圣骑士; 21;愤怒;

标签: php mysql arrays insert


【解决方案1】:

您不需要内部的 for 循环。您多次插入同一行,因为$count 是 CSV 中的字段数。

您不必每次循环检查$row,您可以简单地读取第一行并在循环之前忽略它。

if(empty($handle) === false) {
    fgets($handle); // skip header line
    while(($data = fgetcsv($handle, 1000, ";")) !== FALSE){
        $sql = '
            INSERT INTO MyTable (name, class, level, ability) 
            VALUES ("'.$data[0].'","'.$data[1].'","'.$data[2].'","'.$data[3].'")
        ';
        $Add=$db->query($sql);  
    }
}

【讨论】:

    【解决方案2】:
    // remove `for` loop
    if($row>1){ //ignore header line 
        $sql = '
            INSERT INTO MyTable (name, class, level, ability) 
            VALUES ("'.$data[0].'","'.$data[1].'","'.$data[2].'","'.$data[3].'")
        ';
        $Add=$db->query($sql);  
    }
    

    当然还有准备好的语句,以使您的代码更安全。

    【讨论】:

    • 嗨,谢谢你的帮助,当我删除循环时结果是未定义的偏移量
    • 请善待并提供完整信息。我们在这里猜不到他们。
    • 哎呀!这里是完整的消息:注意:未定义的偏移量:第 15 行 insert_action.php 中的 1 该行是:VALUES ("'.$data[0].'","'.$data[1].'","' .$data[2].'","'.$data[3].'")
    • 输出你的 $data 变量并检查它有什么问题。
    猜你喜欢
    • 1970-01-01
    • 2016-10-19
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多