当我之前使用array_map('mysql_real_escape_string', $row)
时,$row
可以正常使用,之后使用它,它会返回一个空白值,我看到同样的问题,但仍然无法解决,这是我的代码:
$result = $db->query("SELECT * FROM `{$table}` LIMIT {$start}, 1000");
foreach ($result as $row) {
$row = array_map('mysql_real_escape_string', $row);
$sql = "INSERT INTO `{$table}` VALUES ('" . implode("', '", $row) . "');\n";
}
答案 0 :(得分:0)
PHP / mysql alwyas将值作为字符串返回。这意味着您对mysql_real_escape_string的调用将始终尝试转义字符串值。
答案 1 :(得分:0)
在我看来,您使用mysqli
连接到数据库和旧的mysql_real_escape_string()
函数来转义您的值。由于mysql_real_escape_string
有2个参数,并且您无法使用array_map
函数将2个参数传递给函数,因此第二个($dblink
)参数会尝试使用它的默认值(最后一个打开mysql连接或没有打开连接,尝试使用扩展程序配置打开一个连接。由于您没有打开任何连接,并且很可能在配置开放中没有定义任何连接,因此新连接将通过旧API失败。
尝试改为使用mysqli_real_escape_string()
。
$row = array_map(array($db, 'real_escape_string'), $row);
(如果你不使用mysqli扩展,但是旧的mysql,这是更改为新的扩展的正确时间,因为旧的mysql扩展已被弃用)
关于您的查询:
您使用的是没有ORDER BY
子句的限制。在MySQL中没有默认排序,因此未确定select查询返回的行。
此外,您可以使用INSERT..SELECT
语法在一个查询中执行此操作:
INSERT INTO {table}
SELECT * FROM {table} ORDER BY {order_field} LIMIT 1000
注意:不使用天文学家查询(天文学家的星星)总是一个好习惯,但列出所有列。