尝试从WP表中获取变量并切换其值

时间:2021-03-18 作者:Schmutly

我在函数中有一个查询设置,可以使用搜索字符串从wordpress中的表中获取付款状态。通常会“完成”(从paypal IPN返回)。我所要做的就是允许一个本地选项将值字符串更改为另一个值,然后再更改回来。这就是我目前的情况:

 <!---TOGGLE PAYMENT STATUS--->

<?php function toggle_payment_status ()
        { 
           
 global $wpdb;
 $ipn_tables = $wpdb->prefix ."ipn_data_tbl";
 $searchIP = $_POST["searchIP"];
 
 $StatusCheck = $wpdb->get_var( $wpdb->prepare("SELECT payment_status FROM {$ipn_tables} WHERE serial_no = %s "),$searchIP);


  if ($StatusCheck = "Completed")   {
       $StatusCheck = "Refunded";
      } 
  
  else if ($StatusCheck = "Refunded")    {
      $StatusCheck = "Completed";
      }
                             
      $wpdb->update($ipn_tables, array(
          \'payment_status\' => $StatusCheck
                             ) , array(
            \'serial_no\' => $searchIP,
    ));
 }
当我运行它时,完成的字符串变为退款。数据库中的检查将显示更改。太棒了所以$statuscheck应该是退款的新“更改”值。。。但我不明白为什么if语句失败了。我也试过了,但也没用。有人能把小飞象引向正确的方向,解释一下我做错了什么吗?咖啡太多;深夜也无济于事。非常感谢。

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

我在您的代码中看到两个问题:

$searchIP 实际上在$wpdb->prepare(): (我没有使用完整的查询以便您更清楚地看到问题)

$StatusCheck = $wpdb->get_var( $wpdb->prepare("SELECT payment_status ..."),$searchIP);
因此,您应该这样更正:(为清晰起见,重新插入)

$StatusCheck = $wpdb->get_var( $wpdb->prepare( "
    SELECT payment_status FROM {$ipn_tables}
    WHERE serial_no = %s
", $searchIP ) );
if 应使用相等运算符(=====) 而不是基本赋值运算符(=).

例如,使用if ($StatusCheck == "Completed")if ($StatusCheck == "Refunded") 而不是当前代码中的内容。