Мне нужно обеспечить, чтобы большой оператор SQL содержал множество условий в своем предложении WHERE, поэтому я создал массив для предложения WHERE, используя $ wpdb-> prepare правильно, НО произошла ошибка при объединении этого массива вместе в виде строки в окончательном вариантеоператор.
Вот часть моего кода .. Это достаточно безопасно или это может вызвать SQL-инъекцию?
PS Я пытаюсь сделать еще один $ wpdb-> prepare в последней функции get_row , но функция join заключала в кавычки до и после предложения WHERE, поэтому оператор генерирует ошибку.
foreach( $args as $field => $field_value ) {
if( ! is_null( $field_value ) ) {
switch( $field ) {
case 'id': {
if( is_numeric( $field_value ) && ( intval( $field_value ) > 0 ) ) {
$where[] = $wpdb->prepare( 'tbl_names.id = %d', $field_value );
}
} break;
case 'name': {
$where[] = $wpdb->prepare( 'tbl_names.name = %s', $field_value );
} break;
}
}
}
// NOT Working
return $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$tbl_names} tbl_names WHERE %s", join( ' AND ', $where ) ), ARRAY_A );
// Working Good .. BUT Is it Safe??
return $wpdb->get_row( ( "SELECT * FROM {$tbl_names} tbl_names WHERE " . join( ' AND ', $where ) ), ARRAY_A );