Magento 1 SQLクエリ


10

私は自分の会社のレポート機能をセットアップしている最中です。Imは、Google、Moz、Courierなどからデータを収集しています。レポートの一部として、Magentoからデータも取得したいと考えています。これは私たちのサーバー上の非常に安全なフォルダーでホストされるためです。私が知りたいのは、Magentoデータに対してクエリを実行する最も安全な方法は何ですか?

私は走ることができた

  • Magento外の直接SQLクエリ

  • Magento内のSQLクエリですが、MagentoからSQLクエリを自動的に取り出すのに問題があります

  • Magento API

私のウェブサイトの安全性とパフォーマンスの観点から、私は何をするのが一番ですか?

回答:


18

はい、Magento内で直接SQLクエリを実行できます。これを行う最善の方法は、読み取り書き込みリソースを使用することです。あなたはそれを飽きさせることができます:

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

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

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

選択を実行するには、次のようにします。

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

    $ query = 'SELECT * FROM'。$ resource-> getTableName( 'catalog / product');

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

    / *結果を取得します* /
    var_dump($ results);

何かをデータベースに書き込むには:

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

これがお役に立てば幸いです。


@Kayに感謝します。Magentoの外部でデータベースにクエリを実行すると、どのような結果になるか知っていますか。
Will Wright

それほど多くはありませんが、ベストプラクティスではありません。不整合のリスクがありますが、通常は問題ありません。しかし、今ではすべてを1つのワークフローでしっかりと維持しています
Kay Int Veen

これらすべてのクエリはどこにありますか?
partho 2017年

3
この方法でデータベースに書き込むと、SQLインジェクションの脆弱性が発生することに注意してください。これは、値が安全であると確信している場合にのみ行ってください。
–bassplayer7

18

SQLインジェクションを回避するためにこれを行うより適切な方法があります。

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

次のものを作成できます。

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

読んだ:

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

更新:

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

削除:

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

複数挿入:

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

複製時に更新を挿入:

$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
いいね。Magentoでデータベースクエリロジックを教えてくれました。
Anse

1
うわー、私がMagentoに取り組み始めたとき、これが可能であることを知っていればよかったのに。素晴らしい説明!
Eric Seastrand
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.