SQL Query CSV okumak ve çalıştırmak için bir PHP dosyası yazma

5 Cevap php

Ben bir PHP komut dosyası aşağıdaki biçimde bir CSV dosyasının içeriğini okumak istiyorum

id, sku
1,104101
2,105213

1486 girişlerinin toplam vardır, ben bunun yerine! EOF ederken döngüsü için kullanmak daha iyi olduğuna inanıyorum.

Bundan sonra, ben m118, masa catalog_product_entity adında bir veritabanı üzerinde SQL sorgusu gerçekleştirmek istiyorum.

Sorgu GÜNCELLEME SKU = $ csvSku WHERE id = $ csvId gibi olurdu

PHP ve MySQL hem de bir acemi olmak, ben nerede kodlama başlatmak için bilmiyorum.

5 Cevap

fgetcsv CSV dosyalarını ayrıştırmak için kullanılan olabilir. mysql_query yöntem MySQL sorguları gerçekleştirmek için kullanılan olabilir.

Aşağıdaki gibi tam kodu:

<?php
$fin = fopen('catalog_product_entity.csv','r') or die('cant open file');
$link = mysql_connect('localhost', 'm118', 'pw');
If (!$link) {
    die ('Could not connect: ' . mysql_error());
}
@mysql_select_db('m118') or die ('Unable to select database');
echo "Connection succeeded <br />\n";
while (($data=fgetcsv($fin,1000,","))!==FALSE) {
    $query = "UPDATE catalog_product_entity SET sku='$data[1]' WHERE entity_id='$data[0]'";
    mysql_query($query);
    echo "Record updated <br />\n";
    }
fclose($fin);
mysql_close();
?>

Gibi bir şey yapmanız gerekir:

$filename = "file_name_on_server.csv"
$fp = fopen( $filename ,"r");
while ($line = fgets ($fp))
{

şimdi Split virgülle ayrılmış değerler dizisini almak için kullanabilirsiniz

    $arr = split (",", $line);

Şimdi $ satırda virgülle ayrılmış değerler için bir dizi var. Bir SQL sorgusu bu değerleri sopa basit dize biçimlendirme yapabilirsiniz.

    $query = "INSERT INTO `TableBlah` (Field1, Field2) VALUES (" . $arr[0] . "," . $arr[1] . ")";

Veritabanına bu sorguları göndermek için mysql api kullanın

}
fclose($fp);

Peki öğrenme yapılır :)

Belki şimdi de (bence) PHP MySQL sorguları yürütmek için en iyi, en güvenli ve en hızlı yolu olarak, PDO PHP hakkında bilgi sahibi olmalıdır:

<?php
$fin = fopen('catalog_product_entity.csv','r') or die('cant open file');
try {
    $link = new PDO('mysql:dbname=m118;host=localhost', 'm118', 'pw');
    echo 'Connection succeeded <br />' . PHP_EOL;
    $stmt = $db->prepare('UPDATE catalog_product_entity SET sku = :sku WHERE entity_id = :id');
    //Only give the length parameter if you **KNOW** that no line will be longer than that
    while (($data=fgetcsv($fin,1000,","))!==FALSE) {
        if ($stmt->execute(array(':sku' => $data[1], ':id' => $data[0]))) {
            echo 'Record updated <br />' . PHP_EOL;
        } else {
            $err = $stmt->errorInfo();
            echo 'Update Failed: ' . $err[2] . PHP_EOL;
        }
    }
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
fclose($fin);

PDO komut senin üzerinde şu avantajları vardır:

  • Bu daha güvenli: PDO gerektiğinde otomatik olarak sokulan verileri aktarır. Bu, SQL enjeksiyon saldırıları engeller.
  • Daha hızlı: PDO (hazırlamak olarak) sorgu önbelleğe alır ve daha sonra idam geçirilen parametreleri kullanır.
  • PDO çeşitli DB, sadece MySQL bağlanabilir, böylece switchler DB gerekiyorsa, onun çok daha kolay: Bu taşınabilir bulunuyor.

Ben yaparsanız alışkanlık öğrenmek çünkü adam Tamam, ben senin için kod yazmak alışkanlık. Ama doğru yönde bir işaret olacaktır. PHP bir CSV dosyası ayrıştırma hakkında bilgi için bu linki http://us.php.net/fgetcsv göz atın. Basit bir google arama ayrıca bir MySQL tablosu içine girerken gerekli bilgileri vermelidir.

Goblyn27 doğru. Bir fgetcsv bakmak () ve php.net üzerine mysql_query () atın. Bunu yapmak için nasıl dokümanlar bile örnekleri vardır.