将大量数据插入MySQL表只插入1行?

时间:2014-08-15 19:28:53

标签: php mysql mysqli

我从IDX / RETS服务器提取数据并尝试使用php将数据插入到我自己的MySQL数据库中。

数据以多个关联数组形式出现,我遍历它们将每个数组输入到自己的行中。

表本身有215列,在我的第一次测试中我只拉了10个记录/数组,在运行我的脚本之后我只输入了1行。

我已经能够插入所有10行,但只能将列数减少到大约6个。当试图输入10个记录中的所有215列时,它会保持超时。

我试过了:

ini_set('max_execution_time', 500);

&安培;

set_time_limit(0);

我也尝试将这些值输入到我的php.ini文件中但是我所做的只是脚本似乎只运行了大约15-30秒。

在输入这么多列时,还有其他我缺少或应该做的事情吗?

我的代码只是循环遍历数组的简单while循环。我的插入是这样的:

$sql  = "INSERT INTO rets_property_residentialproperty";
        $sql .= " (`".implode("`, `", array_keys($my_array))."`)";
        $sql .= " VALUES ('".implode("', '", $my_array)."') ";
        $result = mysqli_query($dbcon, $sql) or die(mysql_error());

1 个答案:

答案 0 :(得分:2)

首先,不要混用 mysql mysqli 接口函数。对mysql_error的调用应替换为对mysqli_error的调用。

根本不清楚什么是“超时”。

最有可能的是,INSERT语句抛出错误,代码进入die,问题出在mysql_error函数上。将该功能替换为 mysqli_error ,我冒昧地发现您将收到MySQL错误。

    ... or die(mysqli_error($dbcon));
                    ^       ^^^^^^

可能,底层问题是SQL语法错误。例如,数组中的一个值可能包含需要转义的字符,例如单引号。

(但是,我只是在这里猜测。)

对于调试,您可以考虑回显SQL文本

    echo $sql;
在致电mysqli_query之前

。 (然后,您可以将错误与要发送到数据库的实际SQL文本进行比较。

要处理值中的单引号和其他“危险”字符,(要关闭一个空洞的SQL注入漏洞),您需要在每个数组值上调用mysqli_real_escape_string,然后再包含该值在SQL文本中。或者,使用带有绑定占位符的预准备语句,然后提供数组值作为绑定占位符的值。