Не удается получить переменные для работы в запросе WPDB UPDATE

Я перепробовал все, что мог, но этот запрос не будет работать. Я попытался подготовить, добавив «к обеим переменным, добавив» только к переменной SET, используя springf, используя форматированную строку, где оба значения вставляются в% s, ничего не работает. Я провел всю ночь на этом, и сейчас мне просто хочется плакать.

Этот запрос работает, когда я жестко кодирую значения или вставляю дамп непосредственно в phpmyadmin.

$trans = strval($_POST["trans"]);
$status = strval($_POST["status"]);

global $wpdb;
$wpdb->show_errors;
$query = "UPDATE donations SET donation_status='".mysql_real_escape_string($status)."' WHERE donation_reference = '".mysql_real_escape_string($trans)."'";

$result = $wpdb->query($query);

$wpdb->print_error;

exit( var_dump( $wpdb->last_query ) );

Еще одна забавная вещь: запрос работает, когда я заменяю первые две строки жестко закодированными значениями, например:

$trans = "12345678";
$status = "Transaction Successful";

Но пока значения считываются из переменных $ _POST, запрос не работает.

Я использую PHP версии 5.3.28 и MySQL 5.5.40.

Пожалуйста помоги!

1

Решение

Прежде всего, убедитесь, что $ _POST содержит то, что вы ожидаете.

Тогда для дополнительной безопасности используйте wpdb::update() метод вместо wpdb::query()

$trans = strval($_POST["trans"]);
$status = strval($_POST["status"]);

global $wpdb;
$wpdb->show_errors;
$wdpb->update(
'donations',
array( 'dontion_status' => $status ),
array( 'donation_reference' => $trans ),
);
$wpdb->print_error;

exit( var_dump( $wpdb->last_query ) );
0

Другие решения

Я думаю, что у меня была такая же проблема. Задание переменных для разделов запроса UPDATE и WHERE решило эту проблему. Итак, для вашего кода, используя предложенный метод $ wdpb-> update, это будет:

$status = strval($_POST["status"]);
$trans = strval($_POST["trans"]);

$table_name = 'donations';
$data_update = array( 'dontion_status' => '$status' );
$data_where = array('id' => '$id');

global $wpdb;
$wpdb->update($table_name, $data_update, $data_where, array('%s'), array('%d'));

exit( var_dump( $wpdb->last_query ) );
0

По вопросам рекламы [email protected]