Pertanyaan SQL Magento 1

10

Saya sedang dalam proses menyiapkan beberapa fungsi pelaporan untuk perusahaan saya, saya mengumpulkan data dari orang-orang seperti Google, Moz dan Kurir kami. Sebagai bagian dari pelaporan saya juga ingin mendapatkan data dari Magento. Karena ini akan di-host di folder yang sangat aman di server kami. Yang ingin saya ketahui adalah apa cara teraman bagi saya untuk menjalankan kueri pada Data Magento?

Saya bisa lari

  • Permintaan SQL langsung di luar Magento

  • SQL meminta di dalam Magento tetapi kemudian akan memiliki masalah mengeluarkannya dari Magento secara otomatis

  • API Magento

Mana yang paling baik saya lakukan dari sudut pandang keselamatan dan kinerja untuk situs web saya?

Will Wright
sumber

Jawaban:

18

Ya, Anda dapat menjalankan kueri sql langsung di Magento, cara terbaik untuk melakukannya adalah dengan menggunakan sumber baca tulis. Anda dapat mengisinya dengan:

    $ resource = Mage :: getSingleton ('core / resource');

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

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

Untuk menjalankan pilih Anda dapat melakukan sesuatu seperti ini:

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

    $ query = 'SELECT * FROM'. $ resource-> getTableName ('katalog / produk');

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

    / * dapatkan hasil * /
    var_dump ($ hasil);

Untuk menulis sesuatu ke database gunakan:

    $ resource = Mage :: getSingleton ('core / resource');

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

    $ table = $ resource-> getTableName ('katalog / produk');

    $ query = "UPDATE {$ table} SET {item} = '{value}' WHERE entity_id = 'value'";

    $ writeConnection-> query ($ query);

Semoga ini bisa membantu Anda.

Kay Int Veen
sumber
Terima kasih @ Mungkin Anda tahu apa akibatnya jika saya menanyakan db di luar Magento?
Will Wright
Tidak banyak, itu bukan praktik terbaik. dan Anda dapat mengambil risiko inkonsistensi tetapi biasanya tidak ada masalah. tapi sekarang Anda tetap ketat dalam satu alur kerja
Kay Int Veen
Di mana menemukan semua pertanyaan ini?
partho
3
Harap diingat bahwa menulis ke database dengan cara ini memperkenalkan kerentanan injeksi SQL . Hanya lakukan ini jika Anda yakin bahwa nilai-nilai Anda aman.
bassplayer7
18

Ada cara yang lebih tepat untuk melakukan ini untuk menghindari Suntikan SQL.

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

Anda dapat membuat:

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

Baca:

$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);

Memperbarui:

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

Menghapus:

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

Sisipkan Banyak:

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

Sisipkan Pembaruan Pada Duplikat:

$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
);
Shadowbob
sumber
2
Bagus. Beri tahu saya logika kueri basis data di Magento.
Anse
1
Wow, saya berharap saya tahu ini mungkin ketika saya mulai bekerja di Magento tahun yang lalu. Penjelasan hebat!
Eric Seastrand