Heim >Backend-Entwicklung >PHP-Tutorial >请教PDO的导入写法

请教PDO的导入写法

WBOY
WBOYOriginal
2016-06-23 13:13:501119Durchsuche

有一文本,要导入数据库中,要用到PDO的写法
一年级:小明,小红,小……,小白
二年级:小A,小B,小C,……小Z
……
需要导入的数据表为
name,banji,other
小明 一年级 0
小红 一年级 0
………………
小A  二年级 0
………………也就是为每个名字带上所在的班级
这之前用PHP的就用了file_get_contents导入后用preg_replace替换换行为一分隔符
然后再array_filter排列后用foreach($arr as $value)的方式来导入
却发现用PDO的写不出来,请大家帮忙一下。


回复讨论(解决方案)

贴出你的不成功代码

贴出你的不成功代码


以下是只导入单独的文本,用PDO不知如何处理,PDO连接都对,但都没能成功导入
想用到预处理,可预处理只用于查询才有效率
$dao = file_get_contents(文本);$dao = preg_replace('/\n|\r\n/', '|', $dao);$arr = array_filter(explode('|', $dao));$arr = array_chunk($arr, 1000);foreach($arr as $value){    $string = '';    foreach($value as $v){        $string .= "('$v'),";        }    $string = trim($string, ',');    mysql_query("insert into biao VALUES " . $string);    }

另外,顺便问一下大家,最近在写到PDO一分页的代码,有个问题:
A:把分页写成封装类,要用到的地方来调用
B:要用到的地方把分页代码复制过来加已修改
不考虑代码重复写入的话,是A还是B有效率( 程序的处理)?

你的每行数据形如这样 一年级:小明,小红,小……,小白
即 "('$v')," 形如这样 "('一年级:小明,小红,小……,小白'),"
表中至少有 3 列,所以 "insert into biao VALUES " . $string 这样的指令必定是失败的

你的每行数据形如这样 一年级:小明,小红,小……,小白
即 "('$v')," 形如这样 "('一年级:小明,小红,小……,小白'),"
表中至少有 3 列,所以 "insert into biao VALUES " . $string 这样的指令必定是失败的


版主你好,我写上注明了,这是单独个字段的导入,而且我这个单独字段导入的不会用PDO来写呀,
现在就是想知道用PDO是如何写入的还有如何拆分导入多个字段的写法

mysql 函数怎么写,PDO 就怎么写

$s =<<< TXT一年级:小明,小红,小,小白二年级:小A,小B,小C,小ZTXT;$ar = explode(PHP_EOL, $s);array_walk($ar, function(&$v) {  $v = preg_split('/:|,/', $v);});//print_r($ar);//构建数据结束$db = new PDO('mysql:dbname=test', 'root', '');$db->query('set names gbk');$db->query("create temporary table biao (name varchar(10), banji varchar(10), other int) charset=gbk");$smt = $db->prepare("insert into biao values (?, ?, 0)");//数据库准备结束foreach($ar as $v) {  $m = array_shift($v);  foreach($v as $t) $smt->execute(array($t, $m));}//插入数据结束$r = $db->query("select * from biao")->fetchall(PDO::FETCH_ASSOC);print_r($r); //看一下结果
Array(    [0] => Array        (            [name] => 小明            [banji] => 一年级            [other] => 0        )    [1] => Array        (            [name] => 小红            [banji] => 一年级            [other] => 0        )    [2] => Array        (            [name] => 小            [banji] => 一年级            [other] => 0        )    [3] => Array        (            [name] => 小白            [banji] => 一年级            [other] => 0        )    [4] => Array        (            [name] => 小A            [banji] => 二年级            [other] => 0        )    [5] => Array        (            [name] => 小B            [banji] => 二年级            [other] => 0        )    [6] => Array        (            [name] => 小C            [banji] => 二年级            [other] => 0        )    [7] => Array        (            [name] => 小Z            [banji] => 二年级            [other] => 0        ))

Parse error: syntax error, unexpected T_FUNCTION in

[/code]


怎么我本地测试都报错了?

... in 后面有行号,你自己看看是哪行

... in 后面有行号,你自己看看是哪行


array_walk($ar, function(&$v) {
  $v = preg_split('/:|,/', $v);
});

就这一行报错  array_walk($ar, function(&$v) {
我看了一下,也没少括号……

那是你的 php 版本低于 5.3
不保护落后,自己去修改吧

那是你的 php 版本低于 5.3
不保护落后,自己去修改吧


PHP版本(php_version):  5.5.25
PHP Version 5.5.25

如果代码为改错,就贴出完整的错误信息

如果代码为改错,就贴出完整的错误信息


解决了,原来真的是本地的版本有问题,传到网上就可以了
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Yii源码解读-环境&配置Nächster Artikel:关于数组