마 젠토 1 SQL 쿼리


10

Google, Moz 및 Courier와 같은 데이터를 수집하는 회사에보고 기능을 설정하는 중입니다. 보고의 일부로 Magento에서 데이터를 가져오고 싶습니다. 이것은 서버의 매우 안전한 폴더에 호스팅됩니다. 내가 알고 싶은 것은 Magento Data에서 쿼리를 실행하는 가장 안전한 방법은 무엇입니까?

나는 달릴 수 있었다

  • Magento 외부의 직접 SQL 쿼리

  • Magento 내부의 SQL 쿼리이지만 Magento에서 자동으로 가져 오는 데 문제가 있습니다.

  • 마 젠토 API

내 웹 사이트의 안전 및 성능 관점에서 가장 좋은 것은 무엇입니까?

답변:


18

예, Magento 내에서 직접 SQL 쿼리를 실행할 수 있습니다. 이렇게하는 가장 좋은 방법은 읽기 쓰기 리소스를 사용하는 것입니다. 당신은 그것을 만족시킬 수 있습니다 :

    $ resource = 마법사 :: getSingleton ( 'core / resource');

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

데이터베이스에 무언가를 쓰려면 다음을 사용하십시오.

    $ resource = 마법사 :: getSingleton ( 'core / resource');

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

    $ table = $ resource-> getTableName ( '카탈로그 / 제품');

    $ query = "업데이트 {$ table} SET {item} = '{value}'WHERE entity_id = 'value'";

    $ writeConnection-> query ($ query);

이것이 당신에게 도움이되기를 바랍니다.


감사합니다 @ Kay 당신은 내가 Magento 외부의 DB를 쿼리하는 결과가 무엇인지 알고 있습니까?
Will Wright

그다지 좋은 방법은 아닙니다. 불일치의 위험이 있지만 일반적으로 문제는 없습니다. 그러나 지금은 하나 개의 워크 플로우에 모두 꽉 유지
케이 지능 Veen은

이 모든 쿼리를 어디에서 찾을 수 있습니까?
partho 2016 년

3
이런 식으로 데이터베이스에 쓰면 SQL 인젝션 취약점이 생길 수 있습니다. 값이 안전하다고 확신 하는 경우에만이 작업을 수행 하십시오 .
bassplayer7'12

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
와우, 나는 몇 년 전에 마 젠토에서 일하기 시작했을 때 이것이 가능하다는 것을 알기를 바란다. 좋은 설명!
Eric Seastrand
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.