PHP / MYSQL在重复密钥更新中插入到无法正常工作

时间:2019-03-20 10:02:12

标签: php mysql

我正在努力使以下代码正常工作。运行它时,不会发生SQL或PHP错误,并且运行平稳。

既不插入新记录,也不更新旧记录。

基本功能是读取csv文件并将其导入MYSQL数据库。

<?php
//DB connect
$db = mysqli_connect("127.0.0.1", "adm", "???", "ip-miniapps");
//DB connection check
if (!$db) {
    $txt = "\r\nupdate_cron.php - ".date("y-m-d");
    $txt .= "\r\nError: Can't connect to MySQL." . PHP_EOL;
    $txt .= "\r\nDebug-Fehlernummer: " . mysqli_connect_errno() . PHP_EOL;
    $txt .= "\r\nDebug-Fehlermeldung: " . mysqli_connect_error() . PHP_EOL;
    $myfile = file_put_contents('/www/website_ip-miniapps/scripts/executables/update_cron.log', $txt.PHP_EOL , FILE_APPEND | LOCK_EX);
    exit;
}

//START - update routine for table app_all_supplier_master_data
if (($handle = fopen("/www/website_ip-miniapps/interfaces/SAP/supplier_md.csv", "r")) !== FALSE)
{
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE)
    {
        //remove excess field
        while(count($data)>13)
        {
            array_pop($data);
        }
        //mysqli-real_escape_string
        $i=0;
        while($i<=12)
        {
            $data[$i]=mysqli_real_escape_string($db, $data[$i]);
            $i++;
        }
        $line = implode("','", $data);
        $query = "INSERT INTO `app_all_supplier_master_data` (`supplier_code`,`name_1`,`name_2`,`street`,`zip`,`city`,`country`,`ekorg`,`supplier_node`,`node_name`,`classification`,`gbc`,`gbc_name`) VALUES('";
        $query .= $line;
        $query .= "') ON DUPLICATE KEY UPDATE
                  `supplier_code`='{$data[0]}',
                  `name_1`='{$data[1]}',
                  `name_2`='{$data[2]}',
                  `street`='{$data[3]}',
                  `zip`='{$data[4]}',
                  `city`='{$data[5]}',
                  `country`='{$data[6]}',
                  `ekorg`='{$data[7]}',
                  `supplier_node`='{$data[8]}',
                  `node_name`='{$data[9]}',
                  `classification`='{$data[10]}',
                  `gbc`='{$data[11]}',
                  `gbc_name`='{$data[12]}'";
        mysqli_query($db, $query) or die(mysqli_error($db));
    }
fclose($handle);

}
//END - update routine for table app_all_supplier_master_data

//DB close
mysqli_close($db);

$txt = "\r\nupdate_cron.php - ".date("y-m-d")." - Success";
$myfile = file_put_contents('/www/website_ip-miniapps/scripts/executables/update_cron.log', $txt.PHP_EOL , FILE_APPEND | LOCK_EX);

?>

我回应了$ query,但什么也看不到。

INSERT INTO `app_all_supplier_master_data` 
(`supplier_code`,`name_1`,`name_2`,`street`,`zip`,`city`,
`country`,`ekorg`,`supplier_node`,`node_name`,`classification`,
`gbc`,`gbc_name`) 
VALUES('Vendor','Name 1','Name 2','Street','PostalCode','City',
    'Cty','POrg','Hi.lv.hier',
    'Vendor number of higher-level','Preisausz.','PGr',
    'Description') 
ON DUPLICATE KEY UPDATE `supplier_code`='Vendor', 
    `name_1`='Name 1', 
    `name_2`='Name 2', 
    `street`='Street', 
    `zip`='PostalCode', 
    `city`='City', 
    `country`='Cty', 
    `ekorg`='POrg', 
    `supplier_node`='Hi.lv.hier', 
    `node_name`='Vendor number of higher-level', 
    `classification`='Preisausz.', 
    `gbc`='PGr', 
    `gbc_name`='Description'

1 个答案:

答案 0 :(得分:0)

我自己解决了问题,谢谢您的支持。我将CSV文件中的原始数据与数据库表的结构进行了比较。

问题是例如我要添加的数据格式错误。

我的关键列是Supplier_code(VARCHAR(6)),但是我尝试添加的数据为“ 0000400000”

所以我简单地修剪掉了多余的零,就可以了。