在以下代码中:
<?php
require_once('/var/cbinfo_connect.php');
$delete_statement1 = "DELETE FROM cbdata";
$delete_statement2 = "DELETE FROM CATstudent";
mysqli_query($dbc,$delete_statement1);
mysqli_query($dbc,$delete_statement2);
$import_statement1 = "LOAD DATA LOCAL INFILE '/var/scripts/cbinfo.csv' INTO TABLE cbdata FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 LINES (deviceID,activeTimeRanges0activeTime,activeTimeRanges0date,activeTimeRanges1activeTime,activeTimeRanges1date,annotatedAssetID,annotaedLocation,annotatedUser,bootMode,deviceFiles0createTime,deviceFiles0downloadUrl,deviceFiles0name,deviceFiles0type,deviceFiles1createTime,deviceFiles1downloadUrl,deviceFiles1name,deviceFiles1type,ethernetMacAddress,firmwareVersion,@var1,@var2,macAddress,model,notes,orgUnitPath,osVersion,platformVersion,recentUsersemail1,recentUsers0type,recentUsersemail2,recentUsers1type,serialNumber,status)
SET lastEnrollmentTime = STR_TO_DATE(@var1,'%Y-%m-%D %H:%i:%s')
SET lastSync = STR_TO_DATE(@var2,'%Y-%m-%D %H:%i:%s')";
$import_statement2 = "LOAD DATA LOCAL INFILE '/home/data/CATS Export.txt' INTO TABLE CATstudent FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'";
mysqli_query($dbc,$import_statement1);
mysqli_query($dbc,$import_statement2);
?>
除了$ import_statement1中的第二个SET命令外,一切正常。如果我移动&#34 ;;直到第一行并注释掉第二个SET语句,它正常工作。如果我尝试注释第一行,保留所有内容,则导入失败。我目前没有办法调试代码。我已将第一个SET语句更改为第二个SET语句的设置。由于某种原因,它不会处理第二个SET语句,无论它是什么。不确定我做错了什么。感谢。
答案 0 :(得分:0)
mysqli_query
一次只收到一条语句,只有一条语句。您应该将其拆分,确保每个语句成功完成,然后再转到下一个语句。
如果您正在处理必须运行N个查询以获得正确结果的情况,将这些查询存储在数组中然后迭代该数组,在注意成功/失败代码时执行每个查询,使代码最小化,可维护。
此处的另一个问题是LOAD DATA INFILE
查询的语法。只允许一个SET
部分:
LOAD DATA LOCAL INFILE '/var/scripts/cbinfo.csv' INTO TABLE cbdata FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 LINES (...)
SET lastEnrollmentTime = STR_TO_DATE(@var1,'%Y-%m-%D %H:%i:%s'),
lastSync = STR_TO_DATE(@var2,'%Y-%m-%D %H:%i:%s')
调整该查询以在单个SET
块中进行两次分配应修复它。
答案 1 :(得分:0)
发现问题,诊断为MYSQL错误,不需要第二个SET命令,而是一个SET和后面跟着逗号的两个表达式。感谢您的任何建议。