【问题标题】:Wordpress update mysql tableWordpress 更新 mysql 表
【发布时间】:2012-12-05 20:44:53
【问题描述】:

我正在为 Wordpress 编写一个插件,它应该检查 mysql 条目是否已经存在。
如果它不存在,Wordpress 应该将条目插入到表中。这部分按我的预期工作。
但是,如果 mysql 表中已经有一个条目,Wordpress 应该更新该表,但这不起作用。

我使用的代码如下:

$wpdb->query($wpdb->prepare("UPDATE $table_name SET time=$current_timestamp WHERE userid=$userid"));

我在这个查询中使用的变量是正确的,因为它们被成功地用于插入到表中,但是在更新函数的某个地方出现了问题。

谁能告诉我我在这里做错了什么?
解决这个问题的正确方法是什么?

【问题讨论】:

    标签: mysql sql wordpress sql-update


    【解决方案1】:

    time 列的值必须用single quote 括起来

    $wpdb->query($wpdb->prepare("UPDATE $table_name SET time='$current_timestamp' WHERE userid=$userid"));
    

    【讨论】:

    • 非常感谢!我盯着自己看的东西,我预计会更复杂。现在完美运行。
    • 但是SQL Injection的查询容易受到攻击,请花点时间阅读文章以防止它。 How to prevent SQL injection in PHP
    • 感谢您提供执行更新查询的最简单方法
    【解决方案2】:
    $result = $wpdb->update('westend_areaofficers', array('officerOrder' => $memberOrder,
    'officerTitle' => $memberTitle, 'officerName' => $memberName, 'officerPhone' => 
     $memberPhone), array('officerId' => $memberId), array('%d','%s', '%s', '%s'),
     array('%d'));
    
    if($result > 0){
    echo "Successfully Updated";
    }
    else{
      exit( var_dump( $wpdb->last_query ) );
    }
    $wpdb->flush();
    

    上述解决方案对我有用,因为使用 $wpbd->query($wpbd->prepare()) 即使传入正确的数字和字符串格式,语句也不起作用。
    var_dump() 函数的目的是查看查询的执行位置 出错。它打印出查询和传递的值。当然使用 $wpdb->flush() 函数清除缓存以供下一个要执行的查询。

    【讨论】:

      【解决方案3】:

      示例:

      将用户(ID 为 546)的 nicename 更改为 Harde_Bande

      $execut= $wpdb->query( $wpdb->prepare( "UPDATE $wpdb->users SET user_nicename = %d WHERE ID = %s", "Harde_Bande", 546 ) );
      var_dump($execut);
      

      了解更多信息: http://codex.wordpress.org/Class_Reference/wpdb#Examples

      【讨论】:

        【解决方案4】:
        UPDATE wp_options SET option_value = replace(option_value, 'http://www.example.com', 'http://localhost/test-site') WHERE option_name = 'home' OR option_name = 'siteurl';
        UPDATE wp_posts SET post_content = replace(post_content, 'http://www.example.com', 'http://localhost/test-site');
        UPDATE wp_postmeta SET meta_value = replace(meta_value,'http://www.example.com','http://localhost/test-site');
        

        【讨论】:

          【解决方案5】:

          很简单

          global $wpdb;
          
          $execut= $wpdb->query("UPDATE `IK_users` SET `user_nicename` = 'amit' WHERE `IK_users`.`ID` = 19");
          
          var_dump($execut);
          

          'IK_users'是自定义表名,替换成你自己的表名,比如'wp_users'

          【讨论】:

            猜你喜欢
            • 2016-11-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-02-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-10-02
            相关资源
            最近更新 更多