在函数中包含的mysqli_real_escape_string中包含数据库连接

时间:2015-09-24 21:14:38

标签: php mysqli

我没有大量使用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()只需要2个参数,在XXX中给出1

我从中知道mysqli_real_escape_string需要两个参数,第一个是$con,第二个是字符串,但我很难知道如何将函数格式化为也包括数据库连接。

请有人帮忙吗?

非常感谢先进:)

2 个答案:

答案 0 :(得分:2)

你不能将array_map与mysqli_real_escape_string一起使用,因为你只能传递一个参数。 但你可以添加一个调用mysqli_real_escape_string的方法 - 这可以像内联一样定义

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

请注意,您必须使用use,因为在匿名函数中$ con是不可见的。

答案 1 :(得分:1)

在程序模式下使用mysqli_real_escape_string时,需要传递"链接"所以你需要为回调创建一个自定义函数

function array_map_callback($a)
{
  global $con;

  return mysqli_real_escape_string($con, $a);
}

然后使用

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