1

我正在使用 phpExcel 库将数据从 excel(csv) 文件导入 mysql 数据。除了下面的 mysql insert 查询是我的源代码之外,一切都运行良好。请在查看我的代码后让我知道问题出在哪里。我尝试过使用数组,但我也失败了。请查看我的 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')");
  }
}
4

2 回答 2

1

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

然后遵循 DCoder 关于切换到 MySQLi 或 PDO 准备语句而不是旧的不推荐使用的 MySQL 和数据库错误处理的建议。

于 2012-04-28T09:55:42.663 回答
1

一方面,您没有检查mysql_query. $cell另一方面,在将其放入查询之前您不会转义。最后也是最重要的一点,这些mysql_功能已被弃用,未来将不再支持。

您应该改用mysqli_函数或PDO,它们会为您处理很多此类问题。如果使用 PDO,代码可能如下所示:

// 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;
}
于 2012-04-28T04:38:05.473 回答