Magento 1 SQL Sorguları


10

Şirketim için Google, Moz ve Courier gibi verileri topladığım için bazı raporlama işlevleri kurma sürecindeyim. Raporlamanın bir parçası olarak Magento'dan da veri almak istiyorum. Bu sunucumuzda çok güvenli bir klasörde barındırılacağı için. Bilmek istediğim, Magento Verileri'nde sorguları çalıştırmanın en güvenli yolu nedir?

Koşabilirdim

  • Magento dışında doğrudan SQL sorguları

  • Magento içindeki SQL sorguları, ancak bunları otomatik olarak Magento'dan çıkarmada sorunlar yaşayabilir

  • Magento API'sı

Web sitem için en iyi güvenlik ve performans açısından hangisini yapıyorum?

Yanıtlar:


18

Evet, Magento içinde doğrudan sql sorguları çalıştırabilirsiniz, bunu yapmanın en iyi yolu okuma yazma kaynağını kullanmaktır. Aşağıdakilerle doyumsuz olabilirsiniz:

    $ resource = Mage :: getSingleton ('çekirdek / kaynak');

    $ readConnection = $ resource-> getConnection ('core_read');

    $ writeConnection = $ resource-> getConnection ('core_write');

Bir seçimi çalıştırmak için şöyle bir şey yapabilirsiniz:

    $ readConnection = $ resource-> getConnection ('core_read');

    $ query = 'SELECT * FROM'. $ Kaynak-> getTableName ( 'katalog / ürün');

    $ results = $ readConnection-> fetchAll ($ query);

    / * sonuçları al * /
    var_dump ($ sonuçları);

Veritabanına bir şeyler yazmak için şunu kullanın:

    $ resource = Mage :: getSingleton ('çekirdek / kaynak');

    $ writeConnection = $ resource-> getConnection ('core_write');

    $ table = $ resource-> getTableName ('katalog / ürün');

    $ query = "UPDATE {$ table} SET {item} = '{değer}' WHERE entity_id = 'değer'";

    $ WriteConnection-> sorgu ($ sorgu);

Umarım bu size yardımcı olur.


Teşekkürler @Kay Magento dışındaki db sorgulamak bana ne sonuçları olacağını biliyor musunuz?
Wright

O kadar değil, bu sadece en iyi uygulama değil. tutarsızlıkları riske atabilirsiniz ancak normalde sorun yoktur. ama şimdi hepsini tek bir iş akışında sıkı tutuyorsunuz
Kay Int Veen

Tüm bu sorguları nerede bulabilirim?
partho

3
Veritabanına bu şekilde yazmanın bir SQL enjeksiyon güvenlik açığı getirdiğini lütfen unutmayın . Bunu yalnızca değerlerinizin güvenli olduğundan eminseniz yapın.
bassplayer7

18

SQL enjeksiyonlarından kaçınmak için bunu yapmanın daha uygun bir yolu vardır.

$resource = Mage::getSingleton('core/resource');
$write = $resource->getConnection('core_write');
$table = $resource->getTableName('your/model');

Şunları oluşturabilirsiniz:

$write->insert(
    $table, 
    ['column_1' => 1, 'column_2' => 2]
);

oku:

$select = $write->select()
    ->from(['tbl' => $table], ['entity_id', 'company'])
    ->join(['tbl2' => $table2], 'tbl.entity_id = tbl2.product_id', ['stuff'])
    ->where('name LIKE ?', "%{$name}%")
    ->group('company');
$results = $write->fetchAll($select);

Güncelleme:

$write->update(
    $table,
    ['column_1' => 3, 'column_2' => 4],
    ['entity_id = ?' => 123]
);

Sil:

$write->delete(
    $table,
    ['entity_id IN (?)' => [123, 456]]
);

Birden Çok Ekle:

$rows = [
    ['col_1'=>'value1', 'col_2'=>'value2', 'col_3'=>'value3'],
    ['col_1'=>'value3', 'col_2'=>'value4', 'col_3'=>'value5'],
];
$write->insertMultiple($table, $rows);

Yinelenende Güncelleme Ekle:

$data = [];
$data[] = [
    'sku' => $sku,
    'name' => $name
];
$write->insertOnDuplicate(
    $table,
    $data, // Could also be an array of rows like insertMultiple
    ['name'] // this is the fields that will be updated in case of duplication
);

2
Güzel. Bana Magento'da veritabanı sorgu mantığını öğretti.
Anse

1
Vay be, keşke bunun yıllar önce Magento üzerinde çalışmaya başladığımda mümkün olduğunu bilseydim. Harika bir açıklama!
Eric Seastrand
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.