Php 使用数组映射(';mysql#u real_escape_string';,$row)返回空值

Php 使用数组映射(';mysql#u real_escape_string';,$row)返回空值,php,Php,当我以前使用array\u map('mysql\u real\u escape\u string',$row)时,$row可以正常使用,使用后返回空值,我看到了同样的问题,但仍然无法解决,下面是我的代码: $result = $db->query("SELECT * FROM `{$table}` LIMIT {$start}, 1000"); foreach ($result as $row) { $row = array_map('mysql_real_escape_strin

当我以前使用
array\u map('mysql\u real\u escape\u 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";
}

PHP/mysql alwyas以字符串形式返回值。这意味着您对mysql\u real\u escape\u string的调用将始终尝试转义字符串值。

在我看来,您正在使用
mysqli
连接到数据库,并使用旧的
mysql\u real\u escape\u string()
函数转义您的值。由于
mysql\u real\u escape\u string
有2个参数,并且不能使用
array\u map
函数将2个参数传递给函数,因此第二个(
$dblink
)参数尝试使用其默认值(上次打开的mysql连接或没有打开的连接,它尝试使用扩展的配置打开一个连接)。由于您没有打开任何连接,并且很可能在您的配置打开中没有定义任何连接,因此新连接将通过旧API失败

尝试改用
mysqli\u real\u escape\u string()

$row = array_map(array($db, 'real_escape_string'), $row);
(如果您不使用mysqli扩展,而是使用旧的mysql,那么现在正是更改为新的mysql扩展的适当时机,因为旧的mysql扩展已被弃用)

关于您的查询: 您使用的是limit,没有
ORDER BY
子句。MySQL中没有默认的排序,因此无法确定select查询返回的行

此外,您可以使用
INSERT..SELECT
语法在一个查询中执行此操作:

INSERT INTO {table}
SELECT * FROM {table} ORDER BY {order_field} LIMIT 1000

注意:最好不要使用天文学家查询(天文学家使用星星),而是列出所有列。

(1)您真的只是重新插入到同一个表中吗?(2) 您没有使用
$sql
执行任何操作。(3)
$db->query()
是否返回结果?通常你必须做一个
->fetch()
(1),是的,相同的表。(2)我需要打印sql,你可以认为它$sql=>$str,(3)$db->query()返回一个二元数组,然后使用foreach遍历它@Seanis
$db
a
mysql
连接(或
mysqli
)?@Sean是mysqli,我知道问题是什么,环境一直是个问题,但是我不知道为什么,我用了另一个没关系。我的数据库链接是使用mysqli connect,我尝试使用“$row=array\u map(array($db,'real\u escape\u string'),$row);”而是返回一个空白数组,该键和值不存在。我的最终目标是备份数据库,每千次备份一次。有错误消息吗?您是否尝试逐行调试查询/代码?你发现了什么?原始代码的主要问题是数据库库不同。您是否尝试了上一个查询,该查询只需一步即可完成任务,而无需遍历记录?