【问题标题】:Can't get variables to work in WPDB UPDATE query无法让变量在 WPDB UPDATE 查询中工作
【发布时间】:2014-11-14 06:55:52
【问题描述】:

我已尽我所能,但此查询不起作用。我已经尝试过准备,将 ' 添加到两个变量中,将 ' 添加到 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。

请帮忙!

【问题讨论】:

  • 回显您的查询并将其发布并与静态值匹配查询您错过的内容
  • 检查您的浏览器控制台以确保数据确实正在发布。你也可以试试isset($_POST["trans"]) ? strval($_POST["trans"]) : "value missing"
  • $_POST 肯定包含正确的值,因为我稍后使用 $trans 和 $status 在页面中显示内容并且效果很好,我唯一的问题是这个表更新。
  • 来自转储的查询是 UPDATE donations SET donation_status='Transaction Successful' WHERE donation_reference='12345678' ,我觉得很好,只是没有运行

标签: php mysql sql wordpress


【解决方案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 ) );

【讨论】:

  • 您错过了重点,OP 已经提到,当他使用硬编码值时查询有效。所以这不是wpdb->updatewpdp->query 的问题。问题似乎是$_POST 不包含它应该包含的数据。
  • 是的,我已经尝试过$wpdb->update,但它也不起作用,也没有产生错误
  • @Keezy 那么检查 $_POST, die('<pre>' . var_export($_POST,1));
  • @NabilKadimi $_POST 工作正常。 array ( 'trans' => '12345678', 'status' => 'Transaction Successful', 'amt' => '1000.00', )
【解决方案2】:

我想我有同样的问题。为查询的 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 ) );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-18
    • 2016-07-10
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    相关资源
    最近更新 更多