我从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());
答案 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文本中。或者,使用带有绑定占位符的预准备语句,然后提供数组值作为绑定占位符的值。