在mysql中插入第一行后无法插入行

时间:2017-03-06 04:43:07

标签: php mysql sql-server database

我正在制作用户验证表单,在验证前将用户的电话号码和国家/地区插入数据库。但是,插入第一行后,它不会插入第二行。在我的用户' 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;

2 个答案:

答案 0 :(得分:0)

您在UserName上有一个唯一的键约束,但您的UserExists函数不会将其作为参数。也许您应该检查UserExists函数中的userName,因为如果您尝试添加相同的名称,那将是不可能的。

答案 1 :(得分:0)

也许你想要UPDATE记录而不是为同一个用户添加第二条记录?

请参阅INSERT ... ON DUPLICATE KEY UPDATE ...