我已尽力尝试,但此查询无效。我已经尝试过准备,添加'两个变量,添加'使用springf,只使用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 Version 5.3.28和MySQL 5.5.40。
请帮忙!
答案 0 :(得分:0)
首先,确保$ _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 ) );
答案 1 :(得分:0)
我想我有同样的问题。为查询的UPDATE和WHERE部分设置变量解决了这个问题。因此,对于您的代码,使用建议的$ wdpb->更新方法,它将是:
$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 ) );