繁体   English   中英

无法使变量在WPDB UPDATE查询中工作

[英]Can't get variables to work in WPDB UPDATE query

我已经尽力了,但是此查询将不起作用。 我试过prepare,使用springf,使用格式化的字符串(将两个值都插入%s中)将'添加到两个变量,仅将'添加到SET变量,没有任何效果。 我整整整夜都在此度过,现在我只是想哭。

当我对值进行硬编码或将转储直接粘贴到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 ) );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM