PHP将值插入MySQL DB ...但它是双倍的

时间:2013-12-13 03:33:00

标签: php sql

这是代码......

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,为什么?

2 个答案:

答案 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符号......太神秘了!