【问题标题】:Wrong number of variable placeholders ($wpdb->prepare + ON DUPLICATE KEY UPDATE)变量占位符数量错误($wpdb->prepare + ON DUPLICATE KEY UPDATE)
【发布时间】:2018-01-21 13:18:24
【问题描述】:

我的查询应该在没有现有行时插入一行,但我不知道如何正确放置参数。有 8 个参数进入新行,但如果进行更新,则只应更新 6 列。 但是在进行更新时,它说我提供了错误数量的变量占位符,8 个变量的 14 个占位符。见这里:

    $event_id       =   "value";
    $status_type    =   "value";
    $sport_name     =   "value";
    $startdate      =   "value";
    $ut             =   "value";
    $name           =   "value";
    $value_home     =   "value";
    $value_away     =   "value";

    $sql = "INSERT INTO wp_mytable "
    . "(event_id,status_type, sport_name, startdate, ut, name, value_home, value_away) "
    . "VALUES (%s,%s,%s,%s,%s,%s,%s,%s) "
    . "ON DUPLICATE KEY UPDATE status_type = %s, startdate = %s,ut = %s, name = %s, value_home = %s, value_away = %s";

    $sql = $wpdb->prepare($sql,$event_id, $status_type,$sport_name,$startdate,$ut ,$name ,$value_home ,$value_away );

    $wpdb->query($sql);

我猜插入需要VALUES 占位符,但它们也计入“重复键”更新..

我也试过这样写:

"ON DUPLICATE KEY UPDATE status_type = status_type, startdate = startdate,ut = ut, name = name, value_home = value_home, value_away = value_away ";

但这不起作用 - 没有更新,但似乎创建并删除了一个新行。那么正确的查询应该是什么样子呢?

【问题讨论】:

    标签: php mysql wordpress prepared-statement


    【解决方案1】:

    我在这里找到了一个可行的解决方案: stackoverflow.com/questions/22699598/prepared-statement-with-on-duplicate-key 更新的每一列都放在“VALUES()”中。

     $sql = "INSERT INTO wp_mytable "
       . "(status_type, startdate,ut ,name ,value_home ,value_away ,sport_name ,event_id ) "
       . "VALUES (%s,%s,%s,%s,%s,%s,%s,%s) "
       . "ON DUPLICATE KEY UPDATE status_type = VALUES(status_type), sport_name=VALUES(sport_name), "
       . "startdate = VALUES(startdate),ut = VALUES(ut), name = VALUES(name), "
       . "value_home = VALUES(value_home), value_away = VALUES(value_away)";
    
        $sql = $wpdb->prepare($sql,$status_type,$startdate,$ut ,$name ,$value_home ,$value_away, $sport_name, $event_id );
    

    【讨论】:

    • 谢谢!这帮助我在 2 年后为我的 SaaS 实现了一项巨大的功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 2019-05-21
    • 2021-02-06
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 2013-10-03
    相关资源
    最近更新 更多