Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果行存在,则更新,否则将新行插入另一个表_Php_Mysql - Fatal编程技术网

Php 如果行存在,则更新,否则将新行插入另一个表

Php 如果行存在,则更新,否则将新行插入另一个表,php,mysql,Php,Mysql,我知道,但没用 我有一个ID和值的列表。现在我必须检查我的用户数据库中是否存在该id。如果是这样,那么该行将被更新,否则我必须在另一个表tmp_user中插入id 编辑:这是我的尝试 IF NOT EXISTS (SELECT * FROM `wcf1_user` WHERE `steamID` = 1) THEN INSERT INTO `wcf1_points_tmp` (`steamID`, `points`) VALUES (1, 2) ELSE // Update stuff..

我知道,但没用

我有一个ID和值的列表。现在我必须检查我的用户数据库中是否存在该id。如果是这样,那么该行将被更新,否则我必须在另一个表tmp_user中插入id

编辑:这是我的尝试

IF NOT EXISTS (SELECT * FROM `wcf1_user` WHERE `steamID` = 1) THEN

INSERT INTO `wcf1_points_tmp` (`steamID`, `points`) VALUES (1, 2)

ELSE

// Update stuff......

END IF;
结果:1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行的“如果不存在,请从wcf1\U用户中选择*然后插入”附近使用的正确语法

谢谢你的帮助

如果指定ON,并且插入的行将导致在唯一索引或主键中出现重复值,则会执行旧行的更新。例如,如果列a声明为唯一且包含值1,则以下两条语句具有相同的效果:

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;

UPDATE table SET c=c+1 WHERE a=1;

这是域逻辑,不属于数据层。请改为使用PHP:

<?php
  // connect to the database
  $DSN = "mysql:dbname=$dbname;charset=utf8";
  $opt = array(PDO::MYSQL_ATTR_FOUND_ROWS => true);
  $dbh = new PDO($DSN, $username, $password, $opt);
  $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
  $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  // one assumes you want to perform this operation atomically
  $dbh->beginTransaction();

  // attempt to update the row
  $update = $dbh->prepare('
    UPDATE wcf1_user
    SET    ......
    WHERE  steamID = ?
  ');
  $update->execute(array($steamID));

  // if the update didn't affect any rows
  if (!$update->rowCount()) {
    // insert into another table instead
    $insert = $dbh->prepare('
      INSERT INTO wcf1_points_tmp
        (steamID, points)
      VALUES
        (?, ?)
    ');
    $insert->execute(array($steamID, $points));
  }

  // tada!
  $dbh->commit();
?>

我认为insert语句末尾缺少分号,请尝试以下操作:

IF NOT EXISTS (SELECT * FROM `wcf1_user` WHERE `steamID` = 1) THEN

INSERT INTO `wcf1_points_tmp` (`steamID`, `points`) VALUES (1, 2);

ELSE

// Update stuff...... remember to add semicolon at the end

END IF;

那有什么问题?到目前为止你尝试了什么?它没有帮助的确切含义是什么?您的id列是否定义为主键?@Havelock:不,不是。它只能是唯一的,这是完全不必要的。参见下面的答案-1这仍然会导致与OP最初引用的相同的语法错误:是一个仅在存储程序中有效的流控制语句。@eggyal,噢!我明白了,我不是php或mysql程序员,所以我相信你。