Php MySQL注册案例

Php MySQL注册案例,php,mysql,sql,Php,Mysql,Sql,我通过Facebook登录验证注册用户,效果良好 我存储facebook\u id,facebook\u电子邮件和facebook\u生日。 这是我想要运行的查询 案例1:如果此用户拥有MySQL中存在的facebook\u id,请更新facebook\u电子邮件和facebook\u生日(以防更改) 案例2:如果此用户的facebook\u id在MySQL中不存在,请插入facebook\u id、facebook\u电子邮件和facebook\u生日 我试过了,但没有成功。提前谢谢 SE

我通过Facebook登录验证注册用户,效果良好

我存储
facebook\u id
facebook\u电子邮件
facebook\u生日
。 这是我想要运行的查询

案例1:如果此用户拥有MySQL中存在的facebook\u id,请更新facebook\u电子邮件和facebook\u生日(以防更改)

案例2:如果此用户的facebook\u id在MySQL中不存在,请插入facebook\u id、facebook\u电子邮件和facebook\u生日

我试过了,但没有成功。提前谢谢

SELECT facebook_id
CASE (SELECT COUNT(*) FROM user_facebook WHERE facebook_id = 123123123)
    WHEN 0 THEN INSERT INTO user_facebook (facebook_id) VALUES (1233)
    WHEN 1 THEN UPDATE user_facebook SET facebook_email = "123@gmail.com"
    ELSE
END
FROM user_facebook

您询问的操作称为a或“upsert”

假设
facebook\u id
是主键,或者至少有一个唯一的索引,您可以将可选子句添加到
INSERT
语句中

INSERT INTO user_facebook
    (facebook_id, facebook_email, facebook_birthday)
    VALUES (123123123, '123@gmail.com', '1998-05-02')
ON DUPLICATE KEY UPDATE
    facebook_email = VALUES(facebook_email)
    facebook_birthday = VALUES(facebook_birthday)

如果表中已存在
facebook\u id
,则将更新该记录的电子邮件和生日。否则,将插入一条新记录。

SELECT和查询一般不能像过程代码那样使用。(即SELECT无法执行更新或插入)。Upsert在您的情况下可能会有所帮助。检查此项-听起来您正在寻找一个INSERT语句,其中包含重复密钥更新上的
选项。
插入用户\u facebook(facebook\u id、facebook\u电子邮件、facebook\u名称、facebook\u生日、facebook\u用户名)值('123123','mymail@gmail.com’、‘约翰·约翰’、‘1998年11月5日’、‘约翰·约翰’)在重复密钥更新中,facebook\u email=VALUES(facebook\u email)、facebook\u name=VALUES(facebook\u name)、facebook\u birth=VALUES(facebook\u birth)、facebook\u username=VALUES(facebook\u username)
感谢您的回答。我这样做了,但它插入了用户,即使SQL中存在facebook_id。我错在哪里?听起来你需要在
facebook\u id
上添加一个唯一的索引。要激活重复钥匙更新上的
部件,必须有重复钥匙。如果没有,它将像往常一样插入,因此必须有一些东西指示它是重复的。这可以是唯一的索引或主键(定义上是唯一的)。在尝试该SQL查询之前,我有一个ID为“123123”的用户。除了facebook\u ID,我的ID值是自动递增的。这可能有什么问题吗?我必须在查询中使用它?不,这个自动增量id值很好,但在这种情况下它不会有用。我不是说你应该移除它;总的来说,它还是有用的,但对于你在这里尝试做的事情来说,需要独特的是facebook_id。它成功了,非常感谢!我对原始和独特感到困惑。在我使facebook_id独一无二之后,它成功了。我错过了。再次感谢,它救了我。