Wordpress - вставить как подготовленный запрос против $ wpdb-> insert_id - PullRequest
2 голосов
/ 16 августа 2011

Я создал простой плагин. Он имеет сайт конфигурации в бэкэнде и некоторые функции для сайта пользователя. Мне нужно сохранить некоторые пользовательские выборы в базу данных. Сначала я использовал методы $ wpdb-> insert () и $ wpdb-> update (), но после прочтения https://codex.wordpress.org/wpdb_Class#Protect_Queries_Against_SQL_Injection_Attacks я хочу изменить его на $wpdb->query($wpdb->prepare()).

Но как я могу получить идентификатор только что вставленной строки без нового запроса выбора? если я использую $ wpdb-> insert (), у меня есть этот идентификатор в $ wpdb-> insert_id, но если я использую $ wpdb-> query (), это поле будет пустым ...

1 Ответ

5 голосов
/ 16 августа 2011

Используя $ wpdb-> insert () и $ wpdb-> update (), вы неявно используете функцию $ wpdb-> prepare () и ее защиту.

Например, функция WordPress $ wpdb-> update () имеет в последних двух строках:

$sql = "UPDATE `$table` SET " . implode( ', ', $bits ) . ' WHERE ' . implode( ' AND ', $wheres );
return $this->query( $this->prepare( $sql, array_merge( array_values( $data ), array_values( $where ) ) ) );

Итак, чтобы получить вставленный идентификатор и быть защищенным, я рекомендую использовать $ wpdb-> insert ().

...