我正在制作用户验证表单,在验证前将用户的电话号码和国家/地区插入数据库。但是,插入第一行后,它不会插入第二行。在我的用户' mysql表,我有' id'作为AUTO_INCREMENT的主键。
<?php
class UsersController {
public $_GB;
function __construct($_GB)
{
$this->_GB = $_GB;
}
public function VerifyUser($phone, $code, $countryName)
{
$phone = $this->_GB->_DB->escapeString($phone);
$countryName = $this->_GB->_DB->escapeString($countryName);
$app_name = $this->_GB->getSettings('app_name');
$smsVerification = $this->_GB->getSettings('sms_verification');
if ($smsVerification == 1) {
$smsVerification = true;
} else {
$smsVerification = false;
}
if (!$this->UserExists($phone, $countryName)) {
// Generating API key
$auth_token = $this->generateApiKey();
$arrayData = array(
'phone' => $phone,
'auth_token' => $auth_token,
'status' => 'Hey, follow and add me up on ' . $app_name,
'status_date' => time(),
'country' => $countryName,
'is_activated' => 0,
'has_backup' => 0,
'backup_hash' => null
);
$result = $this->_GB->_DB->insert('users', $arrayData);
$newUserID = $this->_GB->_DB->last_Id();
$this->insertDefaultStatus($newUserID);
// check if row inserted or not
if ($result) {
$IDResult = $this->_GB->_DB->select('users', '*', " `phone` = '{$phone}'");
if ($this->_GB->_DB->numRows($IDResult) > 0) {
$fetch = $this->_GB->_DB->fetchAssoc($IDResult);
$res = $this->createCode($fetch['id'], $code);
if ($res) {
// successfully inserted into database
if ($smsVerification == true) {
$this->verificationCodeMessage($phone, $code);
}
$array = array(
'success' => true,
'message' => 'SMS request has been initiated! Please wait, You will be receiving it shortly.',
'mobile' => $phone,
'smsVerification' => $smsVerification,
'code' => $code,
'hasBackup' => $fetch['has_backup'] == 1 ? true : false
);
return $array;
} else {
// Failed to create user
$array = array(
'success' => false,
'message' => 'Sorry! Something went wrong.',
'mobile' => null,
'smsVerification' => $smsVerification,
'code' => null,
'hasBackup' => false
);
return $array;
}
}
} else {
// Failed to create user
$array = array(
'success' => false,
'message' => 'SORRY! SOMETHING WENT WRONG2.',
'mobile' => null,
'smsVerification' => $smsVerification,
'code' => null,
'hasBackup' => false
);
return $array;
}
} else if ($this->UserExists($phone, $countryName)) {
// User with same phone already existed in the database
// Generating API key
$auth_token = $this->generateApiKey();
$fields = "`auth_token` = '" . $auth_token . "'";
$fields .= ",`is_activated` = '" . 0 . "'";
$result = $this->_GB->_DB->update('users', $fields, "`phone` = {$phone}");
// check if row inserted or not
if ($result) {
$IDResult = $this->_GB->_DB->select('users', '*', " `phone` = '{$phone}'");
if ($this->_GB->_DB->numRows($IDResult) > 0) {
$fetch = $this->_GB->_DB->fetchAssoc($IDResult);
$res = $this->createCode($fetch['id'], $code);
if ($res) {
// successfully inserted into database
// send sms
if ($smsVerification == true) {
$this->verificationCodeMessage($phone, $code);
}
$array = array(
'success' => true,
'message' => 'SMS request has been initiated! Please wait, You will be receiving it shortly.',
'mobile' => $phone,
'smsVerification' => $smsVerification,
'code' => $code,
'hasBackup' => $fetch['has_backup'] == 1 ? true : false
);
return $array;
} else {
// Failed to create user
$array = array(
'success' => false,
'message' => 'Sorry! Something went wrong.',
'mobile' => null,
'smsVerification' => true,
'code' => null,
'hasBackup' => false
);
return $array;
}
}
} else {
// Failed to create user
$array = array(
'success' => false,
'message' => 'Sorry! Something went wrong.',
'mobile' => null,
'smsVerification' => $smsVerification,
'code' => null,
'hasBackup' => false
);
return $array;
}
} else {
$array = array(
'success' => false,
'message' => 'Sorry! mobile number is not valid or missing.',
'mobile' => null,
'smsVerification' => $smsVerification,
'code' => null,
'hasBackup' => false
);
return $array;
}
}
}
当我尝试验证第一个用户时,它运行正常。验证第一个用户AGAIN时,它成功更新用户行,因为它已经存在。但是当我尝试验证另一个用户时,没有任何内容插入到数据库中;它只给了我&#34;抱歉!有些错误2&#34;
查看我的数据库db.sql。
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL,
`UserName` varchar(225) NOT NULL,
`UserStatus` varchar(100) NOT NULL,
`UserState` text NOT NULL,
`phone` varchar(255) NOT NULL,
`country` varchar(255) DEFAULT NULL,
`status` varchar(255) DEFAULT NULL,
`auth_token` varchar(32) NOT NULL,
`UserImage` varchar(100) DEFAULT NULL,
`UserCover` varchar(200) DEFAULT NULL,
`FullName` varchar(225) NOT NULL,
`Date` int(11) NOT NULL,
`active` int(11) DEFAULT '1',
`website` text,
`reg_id` text,
`isFollowing` text NOT NULL,
`status_date` int(11) NOT NULL,
`is_activated` int(1) NOT NULL DEFAULT '0',
`has_backup` int(1) NOT NULL DEFAULT '0',
`backup_hash` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `users`
ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `Index_2` (`UserName`), ADD KEY `Index_3` (`active`);
ALTER TABLE `users`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
答案 0 :(得分:0)
您在UserName上有一个唯一的键约束,但您的UserExists函数不会将其作为参数。也许您应该检查UserExists函数中的userName,因为如果您尝试添加相同的名称,那将是不可能的。
答案 1 :(得分:0)
也许你想要UPDATE
记录而不是为同一个用户添加第二条记录?
请参阅INSERT ... ON DUPLICATE KEY UPDATE ...
。