这是代码......
function create_table($file){
global $my_prepare_sql;
$db = new PDO('myloginaccess', 'pasw');
$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); //Error Handling
$table_to_make = basename($file,'.TXT');
// delete la table
$sql = "DROP TABLE IF EXISTS $table_to_make";
$db->exec($sql);
print("Table EXIST and DELETED.<br/>");
$db->exec($my_prepare_sql[$table_to_make]['create']);
print("Created table : $table_to_make<br/>");
$stmt = $db->prepare($my_prepare_sql[$table_to_make]['insert']) or die ('prepare FAIL');
//Lire le fichier
$handle = fopen($file, "r");
if ($handle) { print("<br/>File Open.<br/>"); }
while (($data = fgetcsv($handle)) !== FALSE) {
$nb_col = '['.count($data).'] ';
$stmt->execute($data);
}
echo 'Nombre de collonnes : '.$nb_col .'<br/>';
if (fclose($handle)) { print("File closed.<br/>");}
return $db;
}
这是表格:
//--- BUREAUX --------------------------------------------------------
$my_prepare_sql['BUREAUX']['create'] =
"CREATE TABLE BUREAUX (
CODE nvarchar (24),
FIRME_CODE nvarchar (24),
NOM_LEGAL nvarchar (80),
NO_CIVIQUE nvarchar (20),
NOM_RUE nvarchar (120),
BUREAU nvarchar (20),
MUNICIPALITE nvarchar (100),
PROVINCE nvarchar (20),
CODE_POSTAL nvarchar (12),
TELEPHONE_1 nvarchar (40),
POSTE_1 int,
TELEPHONE_2 nvarchar (40),
POSTE_2 int,
TELEPHONE_FAX nvarchar (40),
COURRIEL nvarchar (300),
SITE_WEB nvarchar (300),
DIRECTEUR_CODE nvarchar (20)
)";
$my_prepare_sql['BUREAUX']['insert'] =
"INSERT INTO BUREAUX (
CODE,
FIRME_CODE,
NOM_LEGAL,
NO_CIVIQUE,
NOM_RUE,
BUREAU,
MUNICIPALITE,
PROVINCE,
CODE_POSTAL,
TELEPHONE_1,
POSTE_1,
TELEPHONE_2,
POSTE_2,
TELEPHONE_FAX,
COURRIEL,
SITE_WEB,
DIRECTEUR_CODE)
values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
问题,表中的所有值都是DOUBLE aa,aa,bb,bb,cc,cc,aa,bb,cc,为什么?
答案 0 :(得分:1)
重复两次相同的数据会指向循环中的错误,或者调用两次的函数(等) 因此,对于我们来说,调试是一项艰难的工作,因为我们无法访问所有涉及的数据流,从源到您获得双倍数据的数据流。
您可以自己轻松处理:
Mysql是最后一行,你说数据加倍。因此,不是插入数据库,而是回显数据并查看它是否产生相同的问题(我认为它会)。
如果它没有回应相同的双重问题,那么你的问题是在某个地方的Mysql代码或Mysql本身。
回应与Mysql相关的所有变量(等),查看问题的开始位置。
如果它确实回答了同样的双重问题,那么你已经淘汰了Mysql。
你知道它与mysql没什么关系(我假设它不是这样)所以然后回溯你的代码。
是循环吗?数据容器(数组,变量,对象等)是否有两次这些值? 回收容器。
源数据是否有两次?
只能是一些事情。跟踪代码回显并逐个检查每个阶段,最终确定问题的起始位置。
答案 1 :(得分:0)
这是我的问题......这不是一个错误,它是一个功能!
http://www.php.net/manual/en/pdostatement.fetchall.php
Fetch all of the remaining rows in the result set:
Array
(
[0] => Array
(
[NAME] => pear
[0] => pear
[COLOUR] => green
[1] => green
)
[1] => Array
(
[NAME] => watermelon
[0] => watermelon
[COLOUR] => pink
[1] => pink
)
)
我将其更改为:fetchAll(PDO :: FETCH_ASSOC);和BINGO
我的上帝,我讨厌PDO符号......太神秘了!