Как я должен использовать подготовленные операторы в Wordpress с переменными в запросе? - PullRequest
0 голосов
/ 04 сентября 2018

В настоящее время я изучаю Wordpress и PHP, я также использую WooCommerce. В настоящее время у меня есть форма с тремя полями ввода, и я хотел бы проверить, верны ли введенные пользователем данные об их заказе, чтобы пользователь мог перейти на следующую страницу.

Мой текущий код выглядит следующим образом, и я не уверен, что я даже иду в правильном направлении, какая-нибудь помощь?

if(isset($_POST['submit'])) {
global $wpdb;

$ordernumber = $_POST['ordernmbr'];
$orderfirstname = $_POST['firstname'];
$orderpostnumber = $_POST['postnmbr'];

$ordernumber = stripslashes_deep($ordernumber);
$orderfirstname = stripslashes_deep($orderfirstname);
$orderpostnumber = stripslashes_deep($orderpostnumber);


$result = $wpdb->get_results($wpdb->prepare( "SELECT * FROM         $wpdb->wp_postmeta
  WHERE post_id = '$ordernumber' AND meta_value = '$orderfirstname'"));

Ответы [ 3 ]

0 голосов
/ 04 сентября 2018

Лучше всего всегда использовать prepare, но основное его использование - предотвращение атак с использованием SQL-инъекций, и поскольку нет никакого ввода от пользователей / посетителей или они не могут повлиять на запрос, то это не проблема в вашем текущем примере.

Но, как я уже говорил, лучше использовать его, и как только вы начнете его использовать, вы никогда не остановитесь, поэтому в своем примере вы можете использовать его так:

global $wpdb;
$tablename = $wpdb->prefix . "my_custom_table";
$sql = $wpdb->prepare( "SELECT * FROM %s ORDER BY date_created DESC",$tablename );
$results = $wpdb->get_results( $sql , ARRAY_A );

чтобы узнать больше о том, как его использовать, перейдите к кодексу

0 голосов
/ 04 сентября 2018

Вы можете сделать это с помощью prepare:

$sql = 'DELETE FROM `wp_table` WHERE `id_field` = %d';
$wpdb->query($wpdb->prepare($sql, array($_POST['id']))

Что нужно знать:

%d - number
%s - string
%f - float

массив переданных переменных работает в последовательном порядке, поэтому, если у вас был запрос вроде:

SELECT * FROM `wp_table` WHERE `string_field` = %s AND `id_field` = %d

ты бы сделал

array(
    $_POST['string'],
    $_POST['id']
)

если это УДАЛЕНИЕ / ОБНОВЛЕНИЕ, используйте запрос и подготовьтесь. Если выбор использовать приготовить и get_results.

SELECT:

$sql = 'SELECT * FROM `wp_table` WHERE `id` = %d';
$sql = $wpdb->prepare($sql, array($_POST['id']));
$res = $wpdb->get_results($sql);
0 голосов
/ 04 сентября 2018

вам нужно добавить условные значения вашего запроса в качестве параметров подготовительной функции. как приведенное ниже заявление

$wpdb->prepare( "SELECT * FROM {$wpdb->prefix}postmeta WHERE post_id = %d AND meta_value = %s", $ordernumber, $orderfirstname);

для строковых значений мы используем% s

для числовых значений мы используем% d

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...