Php 在函数中包含的mysqli\u real\u escape\u字符串中包含数据库连接

Php 在函数中包含的mysqli\u real\u escape\u字符串中包含数据库连接,php,mysqli,Php,Mysqli,我不是massivley迷上了PHP,但我正在使用一个函数,使用mysqli将数组中的数据插入数据库 功能如下:- $con=mysqli_connect("host","user","password","database"); function mysql_insert($con, $table, $inserts) { $values = array_map('mysqli_real_escape_string', array_values($inserts)); $ke

我不是massivley迷上了PHP,但我正在使用一个函数,使用
mysqli
将数组中的数据插入数据库

功能如下:-

$con=mysqli_connect("host","user","password","database");

function mysql_insert($con, $table, $inserts) {
    $values = array_map('mysqli_real_escape_string', array_values($inserts));
    $keys = array_keys($inserts);

    return mysqli_query($con, 'INSERT INTO `'.$table.'` (`'.implode('`,`', $keys).'`) VALUES (\''.implode('\',\'', $values).'\')');

    mysqli_close($con); 
}
以下是阵列:-

mysql_insert($con, 'table_name', array(
    'id' => NULL,
    'key1' => 'value1',
    'key2' => 'value2',
    'Key3' => 'value3'
));
我发现了错误

警告:mysqli_real_escape_string()需要两个参数,其中一个参数在XXX中给出

我从中了解到,
mysqli\u real\u escape\u string
需要两个参数,第一个参数是
$con
,第二个参数是字符串,但我很难知道如何在函数中格式化代码以包含数据库连接

请问有人能帮忙吗


非常感谢高级:)

您不能将数组映射与mysqli\u real\u escape\u字符串一起使用,因为您只能传递一个参数。 但是您可以添加一个调用mysqli\u real\u escape\u string的方法-这可以像这样内联定义

$values = array_map(function($item) use ($con) {
    return mysqli_real_escape_string($con, $item);
}, array_values($inserts));

请记住,您必须使用
use
,因为$con在匿名函数中不可见。

在过程模式下使用mysqli\u real\u escape\u字符串时,您需要传递“链接”,因此需要为回拨创建自定义函数

function array_map_callback($a)
{
  global $con;

  return mysqli_real_escape_string($con, $a);
}
然后使用

$values = array_map('array_map_callback', array_values($inserts));

你可以,你只需编写回拨中使用的函数,而不必使用
mysqli\u real\u escape\u string
rawHi Philipp,这是最简单且不臃肿的方法,我喜欢将事情最小化谢谢你的帮助!在我将此标记为已接受之前,@Dagon您提到不要使用
mysqli\u real\u escape\u string
raw,这种方法可能会导致后续问题吗?更好的解决方案:完全停止转义,并使用带有占位符的准备好的语句。那你就不用逃走了,句号。这个方法也奏效了,非常感谢!当我明白哪种方法是最好的时候,我会投赞成票或接受这一点。