Php Mysql查询在第二个SET语句中终止

Php Mysql查询在第二个SET语句中终止,php,mysql,Php,Mysql,在以下代码中: <?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 = "L

在以下代码中:

<?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);

?>

mysqli\u查询
一次只接受一条语句和一条语句。您应该将其拆分,确保每个语句都成功完成,然后并且只有在完成之后才能转到下一个语句

如果您要处理的情况是,必须运行N个查询才能获得正确的结果,那么将这些查询存储在一个数组中,然后在该数组中迭代,在执行每个查询的同时注意成功/失败代码,这样就可以生成最少的可维护代码

这里的另一个问题是查询的语法。只允许有一个
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
块中有两个赋值应该可以解决它。

发现的问题,诊断为MYSQL错误,不需要第二个SET命令,而是一个SET和它后面的两个表达式,后跟逗号。谢谢你的建议。

“我目前没有任何方法调试代码。”-那么我也不知道你如何解决这个问题(如果你有权使用脚本来修复它,那么你也有权插入调试语句,对吗?),所以我想我们只能等一等。。。注意:试着摆脱在一次性使用的变量中声明SQL语句的习惯。如果查询直接提供给函数,那么遵循代码就容易多了,而且不再有可能弄乱并发送
$sql3
,而不是视觉上相似的
$sql8
。注意:
mysqli
的面向对象界面明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的
mysql\u查询
接口混淆。在你对程序性风格投入太多之前,值得换一种。示例:
$db=new mysqli(…)
$db->prepare(“…”)
过程接口是PHP 4时代的产物,当时引入了
mysqli
API,不应在新代码中使用。我发现这个问题与MYSQL状态直接相关,与PHP无关。这是我跨越的一个障碍。通过直接在mysql中运行LOAD DATA INFILE命令,我在第二个集合中得到了一个语法错误。谢谢你的建议。我知道我有很多关于编码的知识需要学习。谢谢你的建议,我不认为这就是原因,因为它无法通过singe查询$只要不包含第二个SET命令,import_station1将成功运行。您的代码的格式使其看起来像是那些
SET
操作是独立的,但它们实际上是
LOAD DATA INFILE
调用的一部分。已编辑以在此处包含有关该特定故障的更多信息。