Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.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 在REPLACE语句中使用where子句_Php_Sql_Where - Fatal编程技术网

Php 在REPLACE语句中使用where子句

Php 在REPLACE语句中使用where子句,php,sql,where,Php,Sql,Where,我在PHP脚本中使用了where子句(在看到语法后,我想我不能这样做) 我的问题是我有一个存储用户注册的用户表, 现在,我计划存储另一个关于用户的信息,这是他们订阅的包的类型。因此,我在用户表中添加了另一列subscribed,但我意识到添加另一列可能会干扰我在PHP中编写的上一个insert、select查询。 所以我创建了另一个表,将userid设为外键。package_id为PK,pack_detail为关于package的detail。 现在,我想存储特定用户的包详细信息,我想知道,如果

我在PHP脚本中使用了where子句(在看到语法后,我想我不能这样做)

我的问题是我有一个存储用户注册的用户表, 现在,我计划存储另一个关于用户的信息,这是他们订阅的包的类型。因此,我在
用户表
中添加了另一列
subscribed
,但我意识到添加另一列可能会干扰我在PHP中编写的上一个insert、select查询。 所以我创建了另一个表,将userid设为外键。package_id为PK,pack_detail为关于package的detail。
现在,我想存储特定用户的包详细信息,我想知道,如果用户以前存在,那么他的行应该更新,如何通过替换来实现这一点?

替换通过匹配主键来实现。如果在REPLACE中指定主键值,但不存在具有该值的行,则其工作方式类似于INSERT。如果您尝试插入的主键值已存在于表中,则会覆盖行的其他列

因此不需要WHERE子句。它隐式地查找
,其中pk=value

如果希望它检测给定用户的包详细信息,并且希望使用REPLACE,则必须将userid作为主键

CREATE TABLE userpackages (
  userid INT PRIMARY KEY,
  package_detail TEXT,
  FOREIGN KEY (userid) REFERENCES users(userid)
);
首先,我们添加用户的第一个包:

REPLACE INTO userpackages (userid, package_detail) 
VALUES (1234, 'some package');
接下来,我们更改用户1234的包:

REPLACE INTO userpackages (userid, package_detail) 
VALUES (1234, 'some other package');

如果userid不是您的主键,那么REPLACE将不起作用。

为什么不先为现有行选择,然后再进行更新?我知道,但我想通过REPLACE来完成。REPLACE使用
主键或唯一索引来确定何时插入或删除/插入。您可以使用表中的主键,也可以在(用户)或(用户,包)上创建唯一的索引/键