我的准备好的语句在第二次迭代中不起作用,我遇到了问题,我想知道我是否需要释放它,或者我缺少了什么东西?
// $sheetData an array created from an Excel Sheet
for($i=0; $i <= count($sheetData); $i++) {
$sql;
$sql .= "INSERT INTO equipment";
$sql .= "(tag,date)";
$sql .= "VALUES(?,?)";
$sql .= "ON DUPLICATE KEY UPDATE number=VALUES(tag), date=VALUES(date)";
if($stmt = $db->prepare($sql)) {
if(Utility::filterNull($sheetData[$i][$idxOfTag]),Utility::convertDT($sheetData[$i][$idxOfDate]) != "1969-12-31 23:59:59") {
$stmt->bind_param("ss",$sheetData[$i][$idxOfTag],$sheetData[$i][$idxOfDate]);
$stmt->execute();
}
} else {
DebugLog($debugFileName,"Prepared Statement is false. Error: " . $stmt->error);
DebugLog($debugFileName,"i = " . $i);
}
} // i loop它只在第二次迭代时返回一个错误。
DebugLog($debugFileName,$db->error);
=
You have an error in your SQL syntax;
check the manual that corresponds to your
MySQL server version for the right syntax
to use near 'INSERT INTO equipment (tag,date' at line 1因此,基本上在我的数据库中,它将添加电子表格的第一行,而不添加其他任何内容。
这不是语法错误,因为第一次迭代可以工作。
有什么想法吗?
已经被困在这上面至少2-3个小时了。
发布于 2015-12-11 22:19:06
将$sql定义移出for语句之外:
$sql ='';
$sql .= "INSERT INTO equipment";
$sql .= "(tag,date)";
$sql .= "VALUES(?,?)";
$sql .= "ON DUPLICATE KEY UPDATE number=VALUES(tag), date=VALUES(date)";
for($i=0; $i <= count($sheetData); $i++) {
// removed from here
if($stmt = $db->prepare($sql)) {
if(Utility::filterNull($sheetData[$i][$idxOfTag]),Utility::convertDT($sheetData[$i][$idxOfDate]) != "1969-12-31 23:59:59") {
$stmt->bind_param("ss",$sheetData[$i][$idxOfTag],$sheetData[$i][$idxOfDate]);
$stmt->execute();
}
} else {
DebugLog($debugFileName,"Prepared Statement is false. Error: " . $stmt->error);
DebugLog($debugFileName,"i = " . $i);
}
} // i loop否则,它会继续在每次迭代中添加额外的语句。
https://stackoverflow.com/questions/34233356
复制相似问题