无法在WPDB UPDATE查询中获取变量

时间:2014-11-14 06:55:52

标签: php mysql sql wordpress wpdb

我已尽力尝试,但此查询无效。我已经尝试过准备,添加'两个变量,添加'使用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。

请帮忙!

2 个答案:

答案 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 ) );