我是 PHP 和 MySQL 新手,当其中一个数据库字段为 UNIQUE 时,mysql_insert_id() 的行为对我来说已成为一堵墙。大大简化了,我有 2 张桌子。
属性表
PropertyID PK, AI
//许多属性描述符
UserID FK 到用户表
用户表
用户ID PK,人工智能
独特的电子邮件
密码
验证后,我将用户的电子邮件插入到 users 表中,并查看电子邮件是否已经存在,因此是返回用户。如果不存在,则将其插入并且是新用户。
$sql = "INSERT IGNORE INTO user ( email ) VALUES ( '$email' )";
//INSERT to a UNIQUE email causes an error & abort. With IGNORE, no INSERT happens (affected_rows=0)
$UserID = mysql_insert_id(); // is 0 if email exists in its UNIQUE field
if ( mysql_affected_rows() == 0 ) {//0 is existing user, else is new user}
这可以很好地将新用户和回访用户分开,他们稍后会收到不同的消息。并且它设置了2个逻辑通道-一个用于输入新密码,第二个用于检查输入的密码是否匹配。
但是,用户的第二个条目(或第三个及以后)的 UserID 始终为 0,零,因为电子邮件字段是唯一的。因此,我无法在属性表中针对 UserID 进行有用的查询,因为所有返回的用户行都有 UserID=0
尽管进行了很多搜索,但我还没有找到或想出解决方案。如何将真正的 UserID(而不是 0 返回)放入新用户和返回用户的属性表中?
尝试具体回答。我在这方面没有很好地遵循一般指示。