使用$wpdb->UPDATE,但在WHERE In和SET上混淆

时间:2019-02-13 作者:Schmutly

我对在$wpdb->update:/where中使用感到困惑,我的代码的最后几行是为了在激活软件时用IP地址更新一个表。如果他们更改IP,它会记录第二个IP地址。它现在激活,但不在表中记录IP的(&A);之后抛出错误日志,我知道我误解了$wpdb->更新。在我在单独的脚本上使用MySQL代码之前;DB和它的工作,但我的错误只是糟糕的查询。错误为:查询更新的“where子句”中的未知列“0”ma1n_ipn_data_tbl 设置0 = \'118.210.134。xxx\'其中0 = \'1\'CODE:如果下面的代码粘贴不正确,下面的线条会更清晰:http://prntscr.com/mkiukd

如果您可以给出一个示例,我需要一些帮助:从getip将表set IP更新为$variable。php,其中item\\u name=etc。。谢谢:PCODE:

                          //ALL WORKS ABOVE// 
        if ($row->ip_address_01 == 0){ 
         $wpdb->update($ipn_table, array( $row->ip_address_01 = $ipONactivate ),array(($row->payer_email = $serial) && ($row->item_name = $product)));  
    //  $sql=( "UPDATE $ipn_table SET ip_address_01 = $ipONactivate WHERE payer_email = $serial && item_name = $product" ); //BEFORE
     } else { 
        if ($row->ip_address_01 !== $ipONactivate && $row->ip_address_02 == 0){
        $wpdb->update($ipn_table, array( $row->ip_address_02 = $ipONactivate),array($row->payer_email = $serial && $row->item_name = $product));    
    //  $sql=( "UPDATE $ipn_table SET ip_address_02 = $ipONactivate WHERE payer_email = $serial && item_name = $product" ); //BEFORE
        } else {    
            echo false;
        }
       }                                                        //ERROR
                        //Unknown column \'0\' in \'where clause\' for query UPDATE `ma1n_ipn_data_tbl` SET `0` = \'118.210.134.xxx\' WHERE `0` = \'1\'

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

您需要查看可用的函数文档here.

该函数采用以下参数:

  • $table 表名称
  • $data 一个PHP数组,其中键是列,值是要插入到这些列中的值
  • $where 一个PHP数组,其中键是列名,值是要检查的值
和另外两个可选参数,可用于强制第二个和第三个参数的值为特定类型。有关这些方面的更多信息,请参阅文档。

您所做的是将第二个和第三个参数的PHP和SQL语法混为一谈($row->ip_address_01 = $ipONactivate 正在分配$ipONactivate$row->ip_address_01, 不生成数组)。您还试图使用前一个查询的列值(例如。$row->ip_address_01) 作为列名。

您需要将参数的格式如下:

$wpdb->update(
    $ipn_table,
    array( 
        \'ip_address_01\' => $ipONactivate
    ),
    array(
        \'payer_email\' => $serial,
        \'item_name\'   => $product,
    )
);
该函数将更新ip_address_01 列,任何行的payer_email$serialitem_name$product. 等效的SQL是:

$sql = "UPDATE {$ipn_table} SET ip_address_01=\'{$ipONactivate}\' WHERE payer_email=\'{$serial}\' AND item_name=\'{$product}\'";
该函数的优点是,它使您无需编写完整的查询(您只需要列名和值),而且它还为您正确地准备和转义值,因此您不会容易受到SQL注入的攻击(如果您按原样使用我的SQL示例,您会遇到这种情况)。

相关推荐

是否使用WP_QUERY发布模板查询?

我见过这种基于模板类型查询页面的解决方案:Page template query with WP_Query我很难将其用于使用“单一帖子模板:”而不是“模板名称:”定义的帖子。这是我的代码: // query $the_query = new WP_Query( array( \'post_type\' => \'post\', \'posts_per_page\' => -1, \'meta_query\' => array(