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.