我正在使用phpExcel库从excel(csv)文件导入数据到mysql数据。除了mysql insert query之外,所有的东西都运行得很好,下面是我的源代码。请在审阅我的代码后,让我知道哪里有问题。我尝试过数组,但我也失败了。请检查我的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')");
}
}发布于 2012-04-28 12:38:05
首先,您没有检查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-28 17:55:43
在数据库查询中设置$cell之前,请确保它包含实际的标量值,而不是富文本对象。如果它包含一个富文本对象,则需要将其转换为string (它有一个神奇的__toString方法,也有一个公共的getPlainText()方法)。
然后遵循DCoder的建议,切换到MySQLi或PDO prepared语句,而不是旧的过时的MySQL,以及数据库错误处理。
https://stackoverflow.com/questions/10360489
复制相似问题