如果EXISTS它应该更新行,ELSE INSERT IN到一个新行。如何解决此错误?

时间:2016-02-02 06:03:08

标签: php mysql sql

如何解决此错误?

  

您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便使用“更新user_options set value =' 1'更新user_options set value =' 1'其中name =' slider&#39 ;; INSERT INTO user_options(' at line 2

代码

public function update($slider, $welcomebox, $servicebox, $postbox, $testimonials, $welcomemessage, $welcomededcription, $welcomelink, $welcomelinktitle, $servicetitle, $totalservicedisplay, $ourservice, $blogtitle, $totalblogdisplay, $ourblog, $newstitle, $totalnewsdisplay, $ournews, $totaltestimonialdisplay, $ourtestimonial) {
    $db = connectionstart();
    $currentdatetime = date("Y-m-d H:i:s", time());

    $sql = "select * from user_options ";
    $result = mysql_evaluate($db, $sql, 0);

    $columns = array(
        array(
            'name' => 'slider'
            , 'value' => $slider
            , 'entrydate' => $currentdatetime
        ),
        array(
            'name' => 'welcomebox'
            , 'value' => $welcomebox
            , 'entrydate' => $currentdatetime
        ),
        array(
            'name' => 'servicebox'
            , 'value' => $servicebox
            , 'entrydate' => $currentdatetime
        ),
        array(
            'name' => 'postbox'
            , 'value' => $postbox
            , 'entrydate' => $currentdatetime
        ),
        array(
            'name' => 'testimonials'
            , 'value' => $testimonials
            , 'entrydate' => $currentdatetime
        ),
        array(
            'name' => 'welcomemessage'
            , 'value' => $welcomemessage
            , 'entrydate' => $currentdatetime
        ),
        array(
            'name' => 'welcomededcription'
            , 'value' => $welcomededcription
            , 'entrydate' => $currentdatetime
        ),
        array(
            'name' => 'welcomelink'
            , 'value' => $welcomelink
            , 'entrydate' => $currentdatetime
        ),
        array(
            'name' => 'welcomelinktitle'
            , 'value' => $welcomelinktitle
            , 'entrydate' => $currentdatetime
        ),
        array(
            'name' => 'servicetitle'
            , 'value' => $servicetitle
            , 'entrydate' => $currentdatetime
        ),
        array(
            'name' => 'totalservicedisplay'
            , 'value' => $totalservicedisplay
            , 'entrydate' => $currentdatetime
        ),
        array(
            'name' => 'ourservice'
            , 'value' => $ourservice
            , 'entrydate' => $currentdatetime
        ),
        array(
            'name' => 'blogtitle'
            , 'value' => $blogtitle
            , 'entrydate' => $currentdatetime
        ),
        array(
            'name' => 'totalblogdisplay'
            , 'value' => $totalblogdisplay
            , 'entrydate' => $currentdatetime
        ),
        array(
            'name' => 'ourblog'
            , 'value' => $ourblog
            , 'entrydate' => $currentdatetime
        ),
        array(
            'name' => 'newstitle'
            , 'value' => $newstitle
            , 'entrydate' => $currentdatetime
        ),
        array(
            'name' => 'totalnewsdisplay'
            , 'value' => $totalnewsdisplay
            , 'entrydate' => $currentdatetime
        ),
        array(
            'name' => 'ournews'
            , 'value' => $ournews
            , 'entrydate' => $currentdatetime
        ),
        array(
            'name' => 'totaltestimonialdisplay'
            , 'value' => $totaltestimonialdisplay
            , 'entrydate' => $currentdatetime
        ),
        array(
            'name' => 'ourtestimonial'
            , 'value' => $ourtestimonial
            , 'entrydate' => $currentdatetime
        )
    );




            $results = mysql_updateoptionfields($db, $columns);
            if ($results == true) {
                $results = 'SUCCESS';
            }


    connectionclose($db);
    return $result;
}

函数mysql_updateoptionfields

function mysql_updateoptionfields($db, $columns) {
    $sql = "";
    foreach ($columns as $obj) {
        $sql.="INSERT INTO user_options (name,value,entrydate) VALUES ('{$obj['name']}','{$obj['value']}','{$obj['entrydate']}') ON DUPLICATE KEY UPDATE name=values(name);
                update user_options set value='{$obj['value']}' where name='{$obj['name']}';";
    }
    if ($sql != '') {
        $result = mysql_query($sql, $db) or die(mysql_error());
    }
    return $result;
}

如果exixts基于名称

更新,我想插入数据

3 个答案:

答案 0 :(得分:1)

试试这个

INSERT INTO subs
  (col1,col2,col3)
VALUES
  (?, ?, ?)
ON DUPLICATE KEY UPDATE
  Col1     = VALUES(value1),
  Col2     = VALUES(value2);

根据您的问题

INSERT INTO values
  (name,value,entrydate)
VALUES
('{$obj['name']}','{$obj['value']}','{$obj['entrydate']}')
ON DUPLICATE KEY UPDATE
  value     = VALUES(value),
  entrydate     = VALUES(entrydate)

答案 1 :(得分:1)

您的代码中存在3个问题:

  1. 您不应再使用mysql _ *()函数,不推荐使用它们并从php7中删除它们。
  2. mysql_query()在调用中不能执行多于1个sql语句。这是您的语法错误消息的原因。删除单独的更新语句。
  3. 在sql语句的on duplicate key update部分中,您应该为值字段赋值,而不是为name字段赋值。

    ... value='{$obj['value']}'

答案 2 :(得分:1)

“INSERT ... ON DUPLICATE KEY UPDATE”使用此功能。它将帮助您解决问题。 http://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html