Я перепробовал все, что мог, но этот запрос не будет работать. Я попытался подготовить, добавив «к обеим переменным, добавив» только к переменной 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.
Пожалуйста помоги!
Прежде всего, убедитесь, что $ _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 ) );
Я думаю, что у меня была такая же проблема. Задание переменных для разделов запроса 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 ) );