从数组插入值

时间:2015-07-28 18:55:04

标签: php arrays insert

即时使用phpexcel读取我的xls,我没有遇到问题,但是当我试图在我的数据库中插入值时,会在控制台上显示“数组到字符串转换”。

代码:

 $inputFileName = $_FILES['xls']['tmp_name'];
    $inputFileType = PHPExcel_IOFactory::identify($inputFileName);
    $objReader = PHPExcel_IOFactory::createReader($inputFileType);
    $objPHPExcel = $objReader->load($inputFileName);
    // ------------------ COMISIONES ------------------ //
    $sheet = $objPHPExcel->getSheet(2);
    $highestRow = $sheet->getHighestRow();
    $highestColumn = $sheet->getHighestColumn();
    for ($row = 1; $row <= $highestRow; $row++) {
        $rowData[] = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE);            
        foreach ($rowData[0] as $var) {
          $sql = "INSERT INTO bd_comisiones (registro,clave,nombre,rfc,comision,iva,subtotal,retencion,neto,prestamos,neto_a_recibir) VALUES ('" . implode(",", $var) . "')";
          $sql_insert = $conexion->prepare($sql);
          $sql_insert->execute();
        }
    }

数组:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => Registro
                    [1] => CLAVE
                    [2] => NOMBRE
                    [3] => RFC
                    [4] => COMISION
                    [5] => IVA
                    [6] => SUBTOTAL
                    [7] => RETENCION
                    [8] => NETO
                    [9] => PRESTAMOS
                    [10] => NETO_A_RECIBIR
                )

        )    

4 个答案:

答案 0 :(得分:1)

看起来您的implode功能需要稍作修改。

如果你有array('a','b','c'),并且你希望它是一个字符串,每个值附近有引号,你需要修改这一行:

$sql = "INSERT INTO bd_comisiones
  (registro,clave,nombre,rfc,comision,iva,subtotal,retencion,neto,prestamos,neto_a_recibir)
  VALUES ('" . implode(",", $var) . "')";

是这样的:

$sql = "INSERT INTO bd_comisiones
  (registro,clave,nombre,rfc,comision,iva,subtotal,retencion,neto,prestamos,neto_a_recibir)
  VALUES ('" . implode('","', $var) . "')";

这会在每个值之间放置",",而不只是逗号。

如果您仍在对其进行故障排除,请尝试echo $sql;查看完整格式的SQL语句,以确保其正常。

答案 1 :(得分:1)

您的错误发生在哪一行?

除此之外,您的查询将不正确:

$sql = "INSERT ... VALUES ('" . implode(",", $var) . "')";
                                        ^^^

这会产生

INSERT ... VALUES ('Registro,CLAV,...,NETO_A_RECIBIR')

这是一个SINGLE字符串值。你想要

$sql = "INSERT ... VALUES ('" . implode("','", $var) . "')";
                                         ^-^

isntead,因此每个单独的组件都有自己的'...'引用集,生成

INSERT ... VALUES ('Registro','CLAV',...,'NETO_A_RECIBIR')

答案 2 :(得分:0)

我从未使用过PHP Excel,但我认为问题出现在你的插入语句中:当你内爆数组时,只有两个引号!

只需更改您的行:

$sql = "INSERT INTO bd_comisiones (registro,clave,nombre,rfc,comision,iva,subtotal,retencion,neto,prestamos,neto_a_recibir) VALUES ('" . implode("','", $var) . "')";

答案 3 :(得分:0)

我认为你应该在implode函数中添加单引号,如

VALUES ('" . implode("','", $var) . "')";

获取类似

的字符串
VALUES ('A', 'B', 'C');

否则只是

VALUES ('A, B, C');