1

私は、Excel(csv)ファイルからmysqlデータにデータをインポートするためにphpExcelライブラリを使用しています。以下の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')");
  }
}
4

2 に答える 2

1

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 に答える
1

データベース クエリで設定する前に、$cell にリッチ テキスト オブジェクトではなく、実際のスカラー値が含まれていることを確認してください。リッチ テキスト オブジェクトが含まれている場合は、これを文字列にキャストする必要があります (マジック __toString メソッドと public getPlainText() メソッドがあります)。

次に、古い非推奨の MySQL ではなく、MySQLi または PDO 準備済みステートメントへの切り替え、およびデータベース エラー処理に関する DCoder のアドバイスに従ってください。

于 2012-04-28T09:55:42.663 に答える