【问题标题】:PHP MySQL, IF EXISTS update ELSE insert, Dosn't seem to workPHP MySQL,如果存在更新 ELSE 插入,似乎不起作用
【发布时间】:2015-10-21 18:50:42
【问题描述】:

如果参数存在,我正在尝试更新此代码,但是,当我执行任何操作时(它确实说完成,并更新产品,但 products_description 的更新似乎不起作用。代码在这里:

    $query =   "UPDATE products 
            SET products_reference='$varenummer', products_price='$pris'
            WHERE products_id='$id';";

            for ($x = 1; $x <= $amountOfLanguages; $x++) {
                $varenavn = $_POST["varenavn-" . $x];
                $korttekst = $_POST["korttekst-" . $x];
                $langtekst = $_POST["langtekst-" . $x];

                $query .=  "IF EXISTS (SELECT * FROM products_description WHERE products_id='$id' AND languages_id='$x')
                                UPDATE products_description
                                SET products_description_name='$varenavn', products_description_short_description='$korttekst', products_description_description='$langtekst'
                                WHERE products_id='$id'
                                AND languages_id='$x'
                            ELSE
                                INSERT INTO products_description (products_id, languages_id, products_description_name, products_description_short_description, products_description_description)
                                VALUES ('$id', '$x', '$varenavn', '$korttekst', '$langtekst');";
            } 

            if ($conn->multi_query($query) === TRUE) {
                //header("Location: ./");
                //die();
                echo "done";
            } else {
                echo "Error: " . $query . "<br>" . $conn->error;
            }

而且我不能真正使用 ON DUPLICATE,因为我不知道唯一键,我只知道“products_id”和“languages_id”。

提前致谢。

【问题讨论】:

  • 你真的应该使用 ON DUPLICATE。 “我不知道唯一键”是什么意思?
  • 旁注:multi_query php.net/manual/en/mysqli.multi-query.php 的手册将程序样式示例显示为在最后一个连接查询中不包含分号。它可能无法完全修复您的代码,但您应该尝试将其从 '$langtekst');"; 删除到 '$langtekst')"; - 以防万一。
  • 我的意思是我(cide)只知道products_id和languages_id,而不知道prodcuts_description_id,它是这个表的主键,我不能真正让其他任何一个唯一,因为有多种语言,以及与该 products_id 相关的描述。

标签: php mysql mysqli mysqli-multi-query


【解决方案1】:

对于这种情况,您可以在 mysql 中使用更简洁和紧凑的语法 - 使用“重复更新”。查询的一般原则如下:-

insert into `TABLE` ( `FIELD1`,`FIELD2`, `FIELD3` ) values ( 'VALUE1','VALUE2','VALUE3' )
on duplicate key
    update
        `FIELD1`='VALUE1',
        `FIELD2`='VALUE2',
        `FIELD1`='VALUE3';

Basing this on original query.
------------------------------

insert into `products_description` 
    (`products_id`, `languages_id`, `products_description_name`, `products_description_short_description`, `products_description_description` )
    values
    ( '$id', '$x', '$varenavn', '$korttekst', '$langtekst' )
    on duplicate key
    update
        `products_id`='$id',
        `languages_id`='$x';

【讨论】:

  • 是的,但是在检查两个不同的参数时,我将如何使用 ON DUPLICATE?我需要检查是否存在一条记录,其中“products_id”和“languages_id”等于我要插入的记录?
猜你喜欢
  • 1970-01-01
  • 2018-02-05
  • 2014-01-27
  • 2021-02-09
  • 2011-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多