Wordpress: Как удалить результаты при использовании $wpdb->get_results?
Для добавления новых строк в базу данных я использую $wpdb->insert
и чтобы получить строки, которые я использую $wpdb->get_results
,
Проблема в том, что $wpdb->insert
кажется, избегает ввода. Например, a"b
сохраняется как a\"b
в базе данных. Но, $wpdb->get_results
не похоже, чтобы вернуться назад a\"b
в a"b
,
Это правильное поведение по замыслу?
Должен ли я убрать результат $wpdb->get_results
вручную? (Какова правильная функция для этого?)
2 ответа
$wpdb->insert()
а также $wpdb->prepare()
будет избегать данных, чтобы предотвратить атаки SQL-инъекций$wpdb->get_results()
функция предназначена для общей работы с SQL SELECT
заявления, поэтому я считаю, что тот факт, что косые черты остались на месте, является преднамеренным. Это позволяет потребителю данных обрабатывать его по мере необходимости.
Так как $wpdb->get_results()
funciton возвращает массив stdClass
объекты, чтобы удалить косую черту во всех столбцах в каждой строке, необходимо выполнить итерацию по строкам и по свойствам каждого объекта строки, выполняющего PHP stripslashes()
функционировать на нем.
foreach( $quotes as &$quote ) {
foreach( $quote as &$field ) {
if ( is_string( $field ) )
$field = stripslashes( $field );
}
}
Дополнительная информация о функции wpdb->get_results(): http://codex.wordpress.org/Class_Reference/wpdb
http://codex.wordpress.org/Function_Reference/stripslashes_deep
//replace $_POST with $POST
$POST = array_map( 'stripslashes_deep', $_POST);
$wpdb->insert(
'wp_mytable',
array(
'field_name' => $POST['field_name'],
'type' => $POST['type'],
'values' => serialize($POST['values']),
'unanswered_link' => $POST['unanswered_link'],
),
array(
'%s','%s','%s','%s'
)
);