我对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是合适的解决方案。我只是在客户端的服务器上工作。立即改变整个系统是不可行的。
答案 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?