龙空技术网

PHP插入数据方法

小危95 129

前言:

目前我们对“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