使用array_map(' mysql_real_escape_string',$ row)返回空值

时间:2015-11-23 07:15:13

标签: php

当我之前使用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";
}

2 个答案:

答案 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

注意:不使用天文学家查询(天文学家的星星)总是一个好习惯,但列出所有列。