Zapytania SQL Magento 1


10

Jestem w trakcie konfigurowania funkcji raportowania dla mojej firmy, zbieram dane od takich firm jak Google, Moz i nasz Kurier. W ramach raportowania chcę również uzyskać dane z Magento. Ponieważ będzie to przechowywane w bardzo bezpiecznym folderze na naszym serwerze. Chciałbym wiedzieć, jaki jest dla mnie najbezpieczniejszy sposób uruchamiania zapytań dotyczących danych Magento?

mógłbym biec

  • Bezpośrednie zapytania SQL poza Magento

  • Kwerendy SQL w Magento, ale wtedy wystąpiłyby problemy z automatycznym wyjściem z Magento

  • Magento API

Co najlepiej robić z punktu widzenia bezpieczeństwa i wydajności mojej witryny?

Odpowiedzi:


18

Tak, możesz uruchamiać bezpośrednie zapytania SQL w Magento, najlepszym sposobem na to jest użycie zasobu zapisu do odczytu. Możesz go nienasycić za pomocą:

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

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

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

Aby uruchomić zaznaczenie, możesz zrobić coś takiego:

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

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

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

    / * uzyskaj wyniki * /
    var_dump ($ results);

Aby napisać coś do bazy danych, użyj:

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

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

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

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

    $ writeConnection-> query ($ query);

Mam nadzieję, że to ci pomoże.


Dzięki @Kay wiesz, jakie byłyby konsekwencje zapytania przeze mnie bazy danych poza Magento?
Will Wright,

Nie tak bardzo, to po prostu nie najlepsza praktyka. i możesz ryzykować niespójności, ale zwykle nie ma problemu. ale teraz trzymasz to wszystko w jednym przepływie pracy
Kay Int Veen

Gdzie znaleźć wszystkie te zapytania?
partho

3
Należy pamiętać, że pisanie do bazy danych w ten sposób wprowadza lukę w iniekcji SQL . Zrób to tylko wtedy, gdy masz pewność, że twoje wartości są bezpieczne.
bassplayer7

18

Istnieje bardziej odpowiedni sposób, aby to zrobić, aby uniknąć wstrzyknięć SQL.

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

Możesz utworzyć:

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

Czytać:

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

Aktualizacja:

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

Usunąć:

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

Wstaw wiele:

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

Wstaw aktualizację po duplikacie:

$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
Miły. Nauczył mnie logiki zapytań do bazy danych w Magento.
Anse

1
Wow, chciałbym wiedzieć, że było to możliwe, kiedy zacząłem pracować nad Magento wiele lat temu. Świetne wyjaśnienie!
Eric Seastrand
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.