Magento 1 SQL Queries


10

ฉันอยู่ระหว่างการตั้งค่าฟังก์ชั่นการรายงานสำหรับ บริษัท ของฉันฉันกำลังรวบรวมข้อมูลจากไลค์ของ Google, Moz และ Courier ของเรา เป็นส่วนหนึ่งของการรายงานฉันยังต้องการรับข้อมูลจาก Magento เช่นนี้จะถูกโฮสต์ในโฟลเดอร์ที่ปลอดภัยมากบนเซิร์ฟเวอร์ของเรา สิ่งที่ฉันอยากรู้คือวิธีที่ปลอดภัยที่สุดสำหรับฉันในการเรียกใช้แบบสอบถามบนข้อมูลวีโอไอพีคืออะไร

ฉันวิ่งได้

  • แบบสอบถาม SQL โดยตรงนอกวีโอไอพี

  • การสืบค้น SQL ภายใน Magento แต่แล้วจะมีปัญหาในการนำพวกเขาออกจาก Magento โดยอัตโนมัติ

  • Magento API

ฉันควรทำสิ่งใดให้ดีที่สุดจากมุมมองด้านความปลอดภัยและประสิทธิภาพสำหรับเว็บไซต์ของฉัน

คำตอบ:


18

ใช่คุณสามารถเรียกใช้แบบสอบถามโดยตรง sql ภายในวีโอไอพีวิธีที่ดีที่สุดในการทำเช่นนี้คือการใช้ทรัพยากรอ่านเขียน คุณสามารถผสมกับ:

    $ resource = Mage :: getSingleton ('คอร์ / ทรัพยากร');

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

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

ในการใช้ตัวเลือกคุณสามารถทำสิ่งนี้:

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

    $ query = 'SELECT * FROM' $ resource-> getTableName ( 'แคตตาล็อกสินค้า /');

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

    / * รับผลลัพธ์ * /
    var_dump ($ ผล);

ในการเขียนบางสิ่งลงในฐานข้อมูลให้ใช้:

    $ resource = Mage :: getSingleton ('คอร์ / ทรัพยากร');

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

    $ table = $ resource-> getTableName ('แคตตาล็อก / ผลิตภัณฑ์');

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

    $ writeConnection-> แบบสอบถาม ($ แบบสอบถาม);

หวังว่านี่จะช่วยคุณได้


ขอบคุณ @Kay คุณรู้หรือไม่ว่าผลที่ตามมาจะเป็นอย่างไรสำหรับฉันที่ค้นหาฐานข้อมูลนอก Magento?
Will Wright

ไม่มากก็แค่ปฏิบัติไม่ได้ดีที่สุด และคุณสามารถเสี่ยงต่อความไม่สอดคล้องกัน แต่โดยปกติจะไม่มีปัญหา แต่ตอนนี้คุณเก็บทุกอย่างไว้ในเวิร์กโฟลว์เดียว
Kay Int Veen

จะค้นหาคำเหล่านี้ได้ที่ไหน?
partho

3
โปรดทราบว่าการเขียนไปยังฐานข้อมูลในลักษณะนี้แนะนำช่องโหว่ฉีด SQL ทำเช่นนี้เฉพาะในกรณีที่คุณแน่ใจว่าค่าของคุณปลอดภัย
bassplayer7

18

มีวิธีที่เหมาะสมกว่าในการทำเช่นนี้เพื่อหลีกเลี่ยง SQL Injections

$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.