Query SQL Magento 1


10

Sono in procinto di impostare alcune funzionalità di reporting per la mia azienda, sto raccogliendo dati da artisti del calibro di Google, Moz e il nostro corriere. Come parte della segnalazione voglio anche ottenere dati da Magento. Poiché questo sarà ospitato in una cartella molto sicura sul nostro server. Quello che vorrei sapere è qual è il modo più sicuro per eseguire query sui dati Magento?

Potrei correre

  • Query SQL dirette al di fuori di Magento

  • Query SQL all'interno di Magento ma avrebbero problemi a farle uscire automaticamente da Magento

  • API Magento

Cosa sto facendo meglio dal punto di vista della sicurezza e delle prestazioni del mio sito Web?

Risposte:


18

Sì, puoi eseguire query sql dirette all'interno di Magento, il modo migliore per farlo è utilizzare la risorsa di scrittura in lettura. Puoi insatiarlo con:

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

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

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

Per eseguire una selezione puoi fare qualcosa del genere:

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

    $ query = 'SELEZIONA * DA'. $ Profilo delle risorse> getTableName ( '/ Catalogo della merce');

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

    / * ottieni i risultati * /
    var_dump ($ risultati);

Per scrivere qualcosa nel database usare:

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

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

    $ table = $ resource-> getTableName ('catalog / product');

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

    $ WriteConnection-> query ($ query);

Spero che questo ti aiuti.


Grazie @Kay sai quali sarebbero le conseguenze se io interrogassi il db al di fuori di Magento?
Will Wright,

Non molto, non è solo la migliore pratica. e puoi rischiare incoerenze ma normalmente nessun problema. ma ora tieni tutto stretto in un unico flusso di lavoro
Kay Int Veen,

Dove trovare tutte queste domande?
partho,

3
Tenere presente che la scrittura nel database in questo modo introduce una vulnerabilità nell'iniezione SQL . Fallo solo se sei sicuro che i tuoi valori siano al sicuro.
bassplayer7,

18

Esiste un modo più appropriato per farlo per evitare iniezioni SQL.

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

Puoi creare:

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

Leggere:

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

Aggiornare:

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

Elimina:

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

Inserisci più:

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

Inserisci aggiornamento su duplicato:

$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
Bello. Mi ha insegnato la logica delle query del database in Magento.
Anse,

1
Wow, vorrei sapere che questo era possibile quando ho iniziato a lavorare su Magento anni fa. Grande spiegazione!
Eric Seastrand,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.