MariaDB上的Innodb写得失败了

时间:2016-09-08 23:58:14

标签: innodb mariadb

我的系统似乎无法将更新写入表格行而没有任何错误 查询详细信息是一个简单的UPDATE,报告为成功,但数据未写入数据库表行。

我有一个用于处理所有sql读/写的对象。包含成功事务后的Object转储。

[pdo:Gibbon\core\security:private] => Gibbon\core\sqlConnection Object
    (
        [pdo:protected] => PDO Object
            (
            )

        [success:Gibbon\core\sqlConnection:private] => 1
        [querySuccess:Gibbon\core\sqlConnection:private] => 1
        [result:Gibbon\core\sqlConnection:private] => PDOStatement Object
            (
                [queryString] => UPDATE `gibbonPerson`
        SET  `passwordStrong` = :passwordStrong, `passwordStrongSalt` = :passwordStrongSalt, `password` = :password WHERE `gibbonPersonID` = :gibbonPersonID
            )

        [data:Gibbon\core\sqlConnection:private] => Array
            (
                [:passwordStrong] => $2y$12$1EZ30jh/CJ/gNwo/alLLlOW/HbcfxCv7tveZgU5jeJ//y.ayiqto2
                [:passwordStrongSalt] => 
                [:password] => 
                [:gibbonPersonID] => 0000000001
            )

        [query:Gibbon\core\sqlConnection:private] => UPDATE `gibbonPerson`
        SET  `passwordStrong` = :passwordStrong, `passwordStrongSalt` = :passwordStrongSalt, `password` = :password WHERE `gibbonPersonID` = :gibbonPersonID
        [error:Gibbon\core\sqlConnection:private] => 
        [table:Gibbon\core\sqlConnection:private] => gibbonPerson
        [identifier:Gibbon\core\sqlConnection:private] => gibbonPersonID
        [where:Gibbon\core\sqlConnection:private] => 
        [version:Gibbon\core\sqlConnection:private] => 5.5.50-MariaDB
        [lastQuery] => UPDATE `gibbonPerson`
        SET  `passwordStrong` = :passwordStrong, `passwordStrongSalt` = :passwordStrongSalt, `password` = :password WHERE `gibbonPersonID` = :gibbonPersonID
        [insert] => 
    )

如果我在执行后立即停止执行脚本(die();),那么数据就会被正确存储,所以我相信这是从内存到磁盘的某种数据刷新失败。 我对服务器的设置是:

character-set-server = utf8
collation-server = utf8_unicode_ci
default-storage-engine = InnoDB    
innodb_change_buffering = all    
innodb_buffer_pool_size = 800M    
innodb_log_file_size = 256M    
innodb_log_buffer_size = 4M    
innodb_flush_log_at_trx_commit = 2    
innodb_thread_concurrency = 8    
innodb_flush_method = O_DIRECT    
innodb_file_per_table = ON    
max_heap_table_size = 64M    
query_cache_size = 32M    
table_cache = 256    
read_buffer_size = 8M    
read_rnd_buffer_size = 8M    
sort_buffer_size = 8M    
tmp_table_size = 64M

我的连接设置为:

private function setSQLMode()
{
    $config = new config();
    $setting = $config->get('setting');
    if (isset($setting['System']['installtype']) && $setting['System']['installtype'] == 'Production')
        $this->getConnection()->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);       // Production
    else
        $this->getConnection()->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);   //Testing and Development
    $this->getConnection()->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    $this->getConnection()->setAttribute(PDO::ATTR_AUTOCOMMIT, true); 
    $this->version = $this->getVersion();
    if ($this->version > '5.7')  //Default for 5.7.x is STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE,NO_AUTO_CREATE_USER
        $result = $this->getConnection()->prepare("SET SESSION `sql_mode` = ''");
    elseif ($this->version > '5.6')  // Default for 5.6.x is NO_ENGINE_SUBSTITUTION
        $result = $this->getConnection()->prepare("SET SESSION `sql_mode` = ''");
    else // Default for < 5.6 is ''
        $result = $this->getConnection()->prepare("SET SESSION `sql_mode` = ''");
    $result->execute(array());
}

有没有人知道这里可能会发生什么?在更改设置和阅读其他帖子后,我无法在静默无法写入数据时感到茫然。任何帮助,将不胜感激!   克雷格

虚拟机上的RAM是1G,所以很小......

显示创建表

gibbonPerson    CREATE TABLE `gibbonPerson` (
  `gibbonPersonID` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT,
  `title` varchar(5) CHARACTER SET utf8 NOT NULL,
  `surname` varchar(30) CHARACTER SET utf8 NOT NULL DEFAULT '',
  `firstName` varchar(30) CHARACTER SET utf8 NOT NULL DEFAULT '',
  `preferredName` varchar(30) CHARACTER SET utf8 NOT NULL DEFAULT '',
  `officialName` varchar(150) CHARACTER SET utf8 NOT NULL,
  `nameInCharacters` varchar(20) CHARACTER SET utf8 NOT NULL,
  `gender` enum('M','F','Other','Unspecified') CHARACTER SET utf8 NOT NULL DEFAULT 'Unspecified',
  `username` varchar(20) CHARACTER SET utf8 NOT NULL,
  `password` varchar(255) CHARACTER SET utf8 NOT NULL DEFAULT '',
  `passwordStrong` varchar(255) CHARACTER SET utf8 NOT NULL,
  `passwordStrongSalt` varchar(255) CHARACTER SET utf8 NOT NULL,
  `passwordForceReset` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N' COMMENT 'Force user to reset password on next login.',
  `status` enum('Full','Expected','Left','Pending Approval') CHARACTER SET utf8 NOT NULL DEFAULT 'Full',
  `canLogin` enum('Y','N') CHARACTER SET utf8 NOT NULL DEFAULT 'Y',
  `gibbonRoleIDPrimary` int(3) unsigned zerofill NOT NULL,
  `gibbonRoleIDAll` varchar(255) CHARACTER SET utf8 NOT NULL,
  `dob` date DEFAULT NULL,
  `email` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
  `emailAlternate` varchar(50) CHARACTER SET utf8 NOT NULL,
  `image_240` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `lastIPAddress` varchar(15) CHARACTER SET utf8 NOT NULL DEFAULT '',
  `lastTimestamp` timestamp NULL DEFAULT NULL,
  `lastFailIPAddress` varchar(15) CHARACTER SET utf8 DEFAULT NULL,
  `lastFailTimestamp` timestamp NULL DEFAULT NULL,
  `failCount` int(1) DEFAULT '0',
  `address1` mediumtext CHARACTER SET utf8 NOT NULL,
  `address1District` varchar(255) CHARACTER SET utf8 NOT NULL,
  `address1Country` varchar(255) CHARACTER SET utf8 NOT NULL,
  `address2` mediumtext CHARACTER SET utf8 NOT NULL,
  `address2District` varchar(255) CHARACTER SET utf8 NOT NULL,
  `address2Country` varchar(255) CHARACTER SET utf8 NOT NULL,
  `phone1Type` enum('','Mobile','Home','Work','Fax','Pager','Other') CHARACTER SET utf8 NOT NULL DEFAULT '',
  `phone1CountryCode` varchar(7) CHARACTER SET utf8 NOT NULL,
  `phone1` varchar(20) CHARACTER SET utf8 NOT NULL,
  `phone3Type` enum('','Mobile','Home','Work','Fax','Pager','Other') CHARACTER SET utf8 NOT NULL DEFAULT '',
  `phone3CountryCode` varchar(7) CHARACTER SET utf8 NOT NULL,
  `phone3` varchar(20) CHARACTER SET utf8 NOT NULL,
  `phone2Type` enum('','Mobile','Home','Work','Fax','Pager','Other') CHARACTER SET utf8 NOT NULL DEFAULT '',
  `phone2CountryCode` varchar(7) CHARACTER SET utf8 NOT NULL,
  `phone2` varchar(20) CHARACTER SET utf8 NOT NULL,
  `phone4Type` enum('','Mobile','Home','Work','Fax','Pager','Other') CHARACTER SET utf8 NOT NULL DEFAULT '',
  `phone4CountryCode` varchar(7) CHARACTER SET utf8 NOT NULL,
  `phone4` varchar(20) CHARACTER SET utf8 NOT NULL,
  `website` varchar(255) CHARACTER SET utf8 NOT NULL,
  `languageFirst` varchar(30) CHARACTER SET utf8 NOT NULL,
  `languageSecond` varchar(30) CHARACTER SET utf8 NOT NULL,
  `languageThird` varchar(30) CHARACTER SET utf8 NOT NULL,
  `countryOfBirth` varchar(30) CHARACTER SET utf8 NOT NULL,
  `ethnicity` varchar(255) CHARACTER SET utf8 NOT NULL,
  `citizenship1` varchar(255) CHARACTER SET utf8 NOT NULL,
  `citizenship1Passport` varchar(30) CHARACTER SET utf8 NOT NULL,
  `citizenship1PassportScan` varchar(255) CHARACTER SET utf8 NOT NULL,
  `citizenship2` varchar(255) CHARACTER SET utf8 NOT NULL,
  `citizenship2Passport` varchar(30) CHARACTER SET utf8 NOT NULL,
  `religion` varchar(30) CHARACTER SET utf8 NOT NULL,
  `nationalIDCardNumber` varchar(30) CHARACTER SET utf8 NOT NULL,
  `nationalIDCardScan` varchar(255) CHARACTER SET utf8 NOT NULL,
  `residencyStatus` varchar(255) CHARACTER SET utf8 NOT NULL,
  `visaExpiryDate` date DEFAULT NULL,
  `profession` varchar(30) CHARACTER SET utf8 NOT NULL,
  `employer` varchar(30) CHARACTER SET utf8 NOT NULL,
  `jobTitle` varchar(30) CHARACTER SET utf8 NOT NULL,
  `emergency1Name` varchar(30) CHARACTER SET utf8 NOT NULL,
  `emergency1Number1` varchar(30) CHARACTER SET utf8 NOT NULL,
  `emergency1Number2` varchar(30) CHARACTER SET utf8 NOT NULL,
  `emergency1Relationship` varchar(30) CHARACTER SET utf8 NOT NULL,
  `emergency2Name` varchar(30) CHARACTER SET utf8 NOT NULL,
  `emergency2Number1` varchar(30) CHARACTER SET utf8 NOT NULL,
  `emergency2Number2` varchar(30) CHARACTER SET utf8 NOT NULL,
  `emergency2Relationship` varchar(30) CHARACTER SET utf8 NOT NULL,
  `gibbonHouseID` int(3) unsigned zerofill DEFAULT NULL,
  `studentID` varchar(10) CHARACTER SET utf8 NOT NULL,
  `dateStart` date DEFAULT NULL,
  `dateEnd` date DEFAULT NULL,
  `gibbonSchoolYearIDClassOf` int(3) unsigned zerofill DEFAULT NULL,
  `lastSchool` varchar(100) CHARACTER SET utf8 NOT NULL,
  `nextSchool` varchar(100) CHARACTER SET utf8 NOT NULL,
  `departureReason` varchar(50) CHARACTER SET utf8 NOT NULL,
  `transport` varchar(255) CHARACTER SET utf8 NOT NULL,
  `transportNotes` text CHARACTER SET utf8 NOT NULL,
  `calendarFeedPersonal` text CHARACTER SET utf8 NOT NULL,
  `viewCalendarSchool` enum('Y','N') CHARACTER SET utf8 NOT NULL DEFAULT 'Y',
  `viewCalendarPersonal` enum('Y','N') CHARACTER SET utf8 NOT NULL DEFAULT 'Y',
  `viewCalendarSpaceBooking` enum('Y','N') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `gibbonApplicationFormID` int(12) unsigned zerofill DEFAULT NULL,
  `lockerNumber` varchar(20) CHARACTER SET utf8 NOT NULL,
  `vehicleRegistration` varchar(20) CHARACTER SET utf8 NOT NULL,
  `personalBackground` varchar(255) CHARACTER SET utf8 NOT NULL,
  `messengerLastBubble` date DEFAULT NULL,
  `privacy` text CHARACTER SET utf8,
  `dayType` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT 'Student day type, as specified in the application form.',
  `gibbonThemeIDPersonal` int(4) unsigned zerofill DEFAULT NULL,
  `gibboni18nIDPersonal` int(4) unsigned zerofill DEFAULT NULL,
  `studentAgreements` text CHARACTER SET utf8,
  `googleAPIRefreshToken` varchar(255) CHARACTER SET utf8 NOT NULL,
  `receiveNotificationEmails` enum('Y','N') CHARACTER SET utf8 NOT NULL DEFAULT 'Y',
  `fields` text CHARACTER SET utf8 NOT NULL COMMENT 'Serialised array of custom field values',
  PRIMARY KEY (`gibbonPersonID`),
  UNIQUE KEY `username` (`username`),
  KEY `username_2` (`username`,`email`)
) ENGINE=InnoDB AUTO_INCREMENT=1817 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

1 个答案:

答案 0 :(得分:0)

对于一台小型的1GB&#34;机器&#34;,你可能会因为这些&#34;高&#34;而疯狂交换。设置:

innodb_buffer_pool_size = 800M      --> 60M
max_heap_table_size = 64M           --> 5M
query_cache_size = 32M              --> 5M
table_cache = 256                   --> 100
read_buffer_size = 8M               --> 4M
read_rnd_buffer_size = 8M           --> 4M
sort_buffer_size = 8M               --> 4M
tmp_table_size = 64M                --> 5M

不要跨列显示数组;为公民身份,地址,电话等制作额外的表格。

:password如何替代?是否适当地逃脱并引用?失败案件中有哪些特殊字符?