2017-03-06 116 views
0

我正在處理一個用戶驗證表單,該表單將用戶的電話號碼和國家/地區插入到數據庫中,然後再進行驗證。但是,插入第一行後,它不插入第二行。在我的'user'mysql表中,我有'id'作爲AUTO_INCREMENT的主鍵。在mysql中插入第一行後無法插入行

<?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; 
    } 

} 

} 

當我嘗試驗證第一個用戶時,它工作正常。當再次驗證第一個用戶時,它會成功更新用戶行,因爲它已經存在。但是,當我嘗試驗證另一個用戶時,沒有任何內容插入到數據庫中;它只會給我「SORRY!SOMETHING WENT WRONG2」

請參閱我的數據庫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

唯一鍵不允許重複相同的值,請檢查您的插入值 – praveena

回答

0

您對用戶名唯一鍵約束,但你的UserExists函數不接受它的參數。也許你應該檢查UserExists函數中的userName,因爲如果你嘗試添加相同的名字,這將是不可能的。

+1

非常感謝您的回答!我解決了它是刪除「ADD UNIQUE KEY'Index_2'('UserName'),ADD KEY' Index_3'('active')」。 –

0

也許你想要UPDATE記錄而不是爲同一用戶添加第二條記錄?

請參閱INSERT ... ON DUPLICATE KEY UPDATE ...