我的系统似乎无法将更新写入表格行而没有任何错误 查询详细信息是一个简单的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
答案 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
如何替代?是否适当地逃脱并引用?失败案件中有哪些特殊字符?