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?

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.


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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.