вопрос об экранировании строки - PullRequest
0 голосов
/ 07 февраля 2011

Можно ли вставить одно и то же значение более одного раза в экранированную строку? т.е.

$wpdb->prepare("SELECT * FROM table WHERE (column1 = %s || column2 = %s || column3 = %s) AND this = $s", $search_terms,$that"); 

Если нет, есть ли у кого-нибудь хорошая альтернатива для строителя условий. SQL запускается более одного раза для выбора таблиц. Некоторые таблицы имеют больше столбцов для поиска, чем другие, поэтому я создал конструктор условий. Но сейчас я пытаюсь избежать значений, чтобы предотвратить внедрение SQL.

$conditions = "";
                $query_seperator = " || ";
                $i = 0;
                foreach($table['fields'] as $field){

                    if ($i < ($field_count-1)){
                        $conditions = $conditions . $field . " LIKE %s" . $query_seperator;
                    } else {
                        $conditions = $conditions . $field . " LIKE %s";
                    }

                    $i++;
                }

$wpdb->prepare("SELECT * FROM table WHERE ($conditions) AND this = $s", $search_terms,$that"); 

1 Ответ

0 голосов
/ 07 февраля 2011

Ваш запрос эквивалентен

$wpdb->prepare("SELECT * FROM table WHERE %s IN (column1,column2,column3) AND this = $s", $search_terms,$that"); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...