前言:
目前我们对“phpfields”可能比较关心,各位老铁们都想要剖析一些“phpfields”的相关文章。那么小编同时在网络上搜集了一些对于“phpfields””的相关内容,希望你们能喜欢,朋友们快快来了解一下吧!插入数据库的两种方法创建数据表
CREATE TABLE `area` ( `id` int NOT NULL AUTO_INCREMENT COMMENT 'ID', `pid` int DEFAULT NULL COMMENT '父id', `shortname` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '简称', `name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '名称', `mergename` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '全称', `level` tinyint DEFAULT NULL COMMENT '层级:1=省,2=市,3=区/县', `pinyin` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '拼音', `code` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '长途区号', `zip` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '邮编', `first` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '首字母', `lng` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '经度', `lat` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '纬度', PRIMARY KEY (`id`), KEY `pid` (`pid`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='地区表';通过insert语句进行数据插入 我们正常一条两条的数据是通过insert插入这样也是简单快捷,但是如果遇到大量数据需要进行插入时,insert的速度会慢不少
INSERT INTO `area` (`id`, `pid`, `shortname`, `name`, `mergename`, `level`, `pinyin`, `code`, `zip`, `first`, `lng`, `lat`) VALUES (1, 0, '北京', '北京', '中国,北京', 1, 'beijing', '', '', 'B', '116.405285', '39.904989'); INSERT INTO `area` (`id`, `pid`, `shortname`, `name`, `mergename`, `level`, `pinyin`, `code`, `zip`, `first`, `lng`, `lat`) VALUES (2, 1, '北京', '北京市', '中国,北京,北京市', 2, 'beijing', '010', '100000', 'B', '116.405285', '39.904989');通过load data local infile加载
官方文档 总结下来就是以下语句
$fileName = 文件名,需要有权限加载到$tableName = 表名$flag = 文件中,每个值之间分分隔符'\n' 换行符$keysStr = 数据库中表字段需要和插入得数据一一对应如果指定了REPLACE,主键冲突时,新插入的行会替代原有行"load data concurrent infile '{$fileName}' REPLACE into table {$tableName} FIELDS TERMINATED BY '" . $flag . "' lines terminated by '\n' ({$keysStr});"
PHP代码如下(此处使用了TP框架)
$params['type'] = Env::get('database.type', 'mysql'); $params['hostname'] = Env::get('database.hostname', ''); $params['database'] = Env::get('database.database', ''); $params['username'] = Env::get('database.rootuser', 'root'); $params['password'] = Env::get('database.rootpass', '123456'); $params['hostport'] = Env::get('database.hostport', ''); $params['prefix'] = Env::get('database.prefix', ''); $params['params'] = [\PDO::ATTR_CASE => \PDO::CASE_LOWER, \PDO::ATTR_EMULATE_PREPARES => true, \PDO::MYSQL_ATTR_LOCAL_INFILE => true]; $re = Db::connect($params)->execute($executeSql);
执行
有可能出现的错误
出现报错SQLSTATE[HY000]: General error: 1290 The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
解决方法
在数据库得配置文件中找到[mysqld] 添加secure_file_priv = ''
重启数据库即可
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #phpfields