我正在使用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')");
}
}
答案 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和数据库错误处理。