MYSQL真正的转义字符串观察

时间:2017-06-14 11:35:18

标签: php mysql

我对mysql_real_escape_string有一些奇怪的看法。

在localhost WAMP服务器上尝试此代码时,我得到:

mysql_real_escape_string() expects parameter 1 to be string, array given

代码是这样的:

$_POST= array (
  'level_id' => '4',
  'initLevel' => '4',
  'subject_ids' => 
  array (
    0 => '6',
  ),
  'category' => '11',
  'areas' => '-1',
  'dist_code' => '',
  'district' => '',
  'gender_preference' => '2',
  'race' => 
  array (
    0 => '1',
    1 => '2',
  ),
  'with_photo' => '0',
  'min_age' => '',
  'max_age' => '',
  'notification' => '1',
  'ban_tutor' => '',
  'sort_by' => 'regi_date',
  'fromdate' => '',
  'day' => '14',
  'month' => '5',
  'year' => '2017',
  'todate' => '2017-06-14',
  'result_page' => '10',
  'search' => 'Search Tutors',
);

$_POST = array_map('mysql_real_escape_string', $_POST);
echo '<pre>' . var_export($_GET, true) . '</pre>';exit;

但是当我在实时服务器上尝试相同的操作时。 我没有收到任何错误,但结果是剥离了这样的数组值:

array (
  'level_id' => '4',
  'initLevel' => '4',
  'subject_ids' => NULL,
  'category' => '11',
  'dist_code' => '',
  'district' => '',
  'gender_preference' => '2',
  'race' => NULL,
  'with_photo' => '0',
  'min_age' => '',
  'max_age' => '',
  'notification' => '1',
  'ban_tutor' => '',
  'sort_by' => 'regi_date',
  'fromdate' => '',
  'day' => '14',
  'month' => '5',
  'year' => '2017',
  'todate' => '2017-06-14',
  'result_page' => '10',
  'search' => 'Search Tutors',
)

需要一些方向,如何正确使用它。

注意:我知道{@ 1}}已被弃用,PDO是合适的解决方案。我只是在客户端的服务器上工作。立即改变整个系统是不可行的。

1 个答案:

答案 0 :(得分:0)

首先,你应该使用my_sqli而不是mysql。

立即,

我们可以这样做:

$escaped_row = array_map(array($link, 'mysqli_real_escape_string');

但是array_map不知道将连接作为第一个参数传递。

所以我的观点是使用数组漫步。

array_walk($_POST, function(&$string) use ($link) { 
  $string = mysqli_real_escape_string($link, $string);
});

注意: $ link是您的有效连接。

mysql_real_escape_string and array_map returns blank strings?