Magento 1 SQL查询


10

我正在为我的公司设置一些报告功能,我正在从Google,Moz和我们的Courier等收集数据。作为报告的一部分,我还想从Magento中获取数据。因为这将托管在我们服务器上非常安全的文件夹中。我想知道的是,对Magento数据执行查询最安全的方法是什么?

我可以跑步

  • Magento外部的直接SQL查询

  • Magento内部的SQL查询,但会出现问题,无法自动将其从Magento中删除

  • Magento API

从安全性和性能的角度来看,我对我的网站最好的选择是什么?

Answers:


18

是的,您可以在Magento中运行直接SQL查询,最好的方法是使用读写资源。您可以使用以下方法来满足需要:

    $ resource =法师:: getSingleton('core / resource');

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

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

要运行选择,您可以执行以下操作:

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

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

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

    / *获得结果* /
    var_dump($ results);

要将某些内容写入数据库,请使用:

    $ resource =法师:: 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

没那么多,但这只是最佳实践。而且您可能会遇到不一致的风险,但通常没有问题。但现在您可以将所有工作都紧紧关在一起
Kay Int Veen 2015年

在哪里可以找到所有这些查询?
partho

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时这是可能的。很好的解释!
埃里克·海斯特兰德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.