Mysqli准备声明在第二次迭代时失败

时间:2015-12-11 22:09:50

标签: php mysql mysqli prepared-statement

我在准备好的声明中没有处理第二次迭代的麻烦,我想知道我是否需要释放它或者我失踪的东西?

{{1}}

仅在第二次迭代时返回错误。

{{1}}

因此,基本上在我的数据库中,它将添加电子表格的第一行,而不是其他内容。

这不是语法错误,因为第一次迭代有效。

有什么想法吗?

现在已经坚持了至少2-3个小时。

1 个答案:

答案 0 :(得分:1)

$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

否则,它会在每次迭代时不断添加其他语句。