插入查询不适用于phpexcel脚本

时间:2012-04-28 04:06:14

标签: php mysql database phpexcel

我正在使用phpExcel库将excel(csv)文件中的数据导入到mysql数据中。除了下面的mysql插入查询是我的源代码,每件事都工作正常。请在审核后我的代码告诉我哪里有问题。我试过一个阵列,但我也失败了。请查看我的mysql查询,让我知道在这个PhpExcel库中哪个查询会更好。提前谢谢。

$objPHPExcel = PHPExcel_IOFactory::load("myfile.csv");
foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
  $worksheetTitle     = $worksheet->getTitle();
  $highestRow         = $worksheet->getHighestRow();
  $highestColumn      = $worksheet->getHighestColumn();
  $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
  $nrColumns = ord($highestColumn) - 64;
  for ($row=2; $row<=$highestRow; $row++) {
    $cell = $worksheet->getCellByColumnAndRow(3, $row)->getValue();
    mysql_query("INSERT INTO myTableName (`title`) VALUES ('$cell')");
  }
}

2 个答案:

答案 0 :(得分:1)

首先,您没有检查mysql_query的结果。另一方面,在将$cell放入查询之前,您不会转义mysql_。最重要的是,mysqli_功能正在已弃用,将来不再受支持。

您应该使用// open the db connection - code taken from PHP's PDO examples: $dsn = 'mysql:dbname=testdb;host=127.0.0.1'; $user = 'dbuser'; $password = 'dbpass'; try { $dbh = new PDO($dsn, $user, $password); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); } // throw exceptions when queries fail instead of normal errors $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh->beginTransaction(); try { // your phpexcel code goes here // prepare the query - only needs to be done once $stmt = $dbh->prepare("INSERT INTO myTableName (`title`) VALUES (?)"); // insert each row for ($row=2; $row<=$highestRow; $row++) { $cell = $worksheet->getCellByColumnAndRow(3, $row)->getValue(); $stmt->execute(array($cell)); } $dbh->commitTransaction(); } catch(Exception $E) { $dbh->rollbackTransaction(); throw $E; } 函数或PDO来代替您处理大量此类函数。如果您使用PDO,代码可能如下所示:

{{1}}

答案 1 :(得分:1)

在数据库查询中设置$ cell之前,请确保$ cell包含实际标量值而不包含富文本对象。如果它包含一个富文本对象,则需要将其强制转换为字符串(它有一个神奇的__toString方法,以及一个公共的getPlainText()方法)。

然后按照DCoder关于切换到MySQLi或PDO准备语句的建议,而不是旧的弃用MySQL和数据库错误处理。