首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入查询不适用于phpexcel脚本

问插入查询不适用于phpexcel脚本
EN

Stack Overflow用户
提问于 2012-04-28 12:06:14
回答 2查看 1K关注 0票数 1

我正在使用phpExcel库从excel(csv)文件导入数据到mysql数据。除了mysql insert query之外,所有的东西都运行得很好,下面是我的源代码。请在审阅我的代码后,让我知道哪里有问题。我尝试过数组,但我也失败了。请检查我的mysql查询,并让我知道哪个查询在此PhpExcel库中会更好。提前谢谢。

代码语言:javascript
复制
$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')");
  }
}
EN

回答 2

Stack Overflow用户

发布于 2012-04-28 12:38:05

首先,您没有检查mysql_query的结果。另一方面,在将$cell放入查询之前,您不会对它进行转义。最后,也是最重要的一点,mysql_函数正在被弃用,将来将不再支持。

您应该使用mysqli_函数或PDO,它们可以为您处理大量此类操作。如果使用PDO,代码可能如下所示:

代码语言:javascript
复制
// 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;
}
票数 1
EN

Stack Overflow用户

发布于 2012-04-28 17:55:43

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

然后遵循DCoder的建议,切换到MySQLi或PDO prepared语句,而不是旧的过时的MySQL,以及数据库错误处理。

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

https://stackoverflow.com/questions/10360489

复制
相关文章

相似问题

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