Truy vấn Magento 1 SQL


10

Tôi đang trong quá trình thiết lập một số chức năng báo cáo cho công ty của mình, tôi đang thu thập dữ liệu từ những người như Google, Moz và Chuyển phát nhanh của chúng tôi. Là một phần của báo cáo, tôi cũng muốn lấy dữ liệu từ Magento. Vì điều này sẽ được lưu trữ trong một thư mục rất an toàn trên máy chủ của chúng tôi. Điều tôi muốn biết là cách an toàn nhất để tôi chạy truy vấn trên Dữ liệu Magento là gì?

tôi có thể chạy

  • Truy vấn SQL trực tiếp bên ngoài Magento

  • Các truy vấn SQL bên trong Magento nhưng sau đó sẽ có vấn đề tự động thoát khỏi Magento

  • API Magento

Tôi đang làm gì tốt nhất từ ​​quan điểm an toàn và hiệu suất cho trang web của mình?

Câu trả lời:


18

Có, bạn có thể chạy các truy vấn sql trực tiếp trong Magento, cách tốt nhất để làm điều này là sử dụng tài nguyên đọc ghi. Bạn có thể bảo vệ nó bằng:

    $ resource = Mage :: getSingleton ('lõi / tài nguyên');

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

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

Để chạy một lựa chọn, bạn có thể làm một cái gì đó như thế này:

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

    $ truy vấn = 'CHỌN * TỪ'. $ resource-> getTableName ('danh mục / sản phẩm');

    $ results = $ readConnection-> fetch ALL ($ truy vấn);

    / * nhận kết quả * /
    var_dump (kết quả $);

Để viết một cái gì đó vào cơ sở dữ liệu, hãy sử dụng:

    $ resource = Mage :: getSingleton ('lõi / tài nguyên');

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

    $ bảng = $ resource-> getTableName ('danh mục / sản phẩm');

    $ query = "UPDATE {$ bảng} SET {item} = '{value}' WHERE entity_id = 'value'";

    $ writeConnection-> truy vấn ($ truy vấn);

Hy vọng điều này sẽ giúp cho bạn.


Cảm ơn @Kay bạn có biết hậu quả của việc tôi truy vấn db bên ngoài Magento là gì không?
Will Wright

Không nhiều, nó chỉ không thực hành tốt nhất. và bạn có thể có nguy cơ mâu thuẫn nhưng thông thường không có vấn đề gì. nhưng bây giờ bạn giữ tất cả chặt chẽ trong một quy trình làm việc
Kay Int Veen

Nơi để tìm tất cả các truy vấn này?
partho

1
Xin lưu ý rằng việc ghi vào cơ sở dữ liệu theo cách này sẽ gây ra lỗ hổng SQL SQL . Chỉ làm điều này nếu bạn chắc chắn rằng giá trị của bạn an toàn.
bassplayer7

18

Có một cách thích hợp hơn để làm điều này để tránh Tiêm SQL.

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

Bạn có thể tạo:

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

Đọc:

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

Cập nhật:

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

Xóa bỏ:

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

Chèn nhiều:

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

Chèn cập nhật trên bản sao:

$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
Đẹp. Dạy tôi logic truy vấn cơ sở dữ liệu trong Magento.
Anse

1
Wow, tôi ước tôi biết điều này là có thể khi tôi bắt đầu làm việc trên Magento năm trước. Giải thích tuyệt vời!
Eric Seastrand
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.