首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysqli准备语句在第二次迭代中失败

Mysqli准备语句在第二次迭代中失败
EN

Stack Overflow用户
提问于 2015-12-11 22:09:49
回答 1查看 66关注 0票数 0

我的准备好的语句在第二次迭代中不起作用,我遇到了问题,我想知道我是否需要释放它,或者我缺少了什么东西?

代码语言:javascript
复制
 // $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

它只在第二次迭代时返回一个错误。

代码语言:javascript
复制
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个小时了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-11 22:19:06

$sql定义移出for语句之外:

代码语言:javascript
复制
 $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

否则,它会继续在每次迭代中添加额外的语句。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34233356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档