他のデータベースへの接続
レプリケーションやバックアップ、その他の目的で、外部データを取得するために追加のデータベース接続を使用する必要がある場合があります。
CS-Cart には、コアで厳密に定義されているデフォルトのデータベースホストとは異なるデータベースホストへの接続を確立するための便利な開発者メソッドがあります。
db_initiate
外部ホスト上のデータベースとの接続を確立するには、このメソッドを使用します。
db_initiate($host, $user, $password, $name, $params = array());
パラメーター
$host– データベースホスト。$user– データベースユーザー。$password– データベースパスワード。$name– データベース名。$params– 追加の接続パラメーターの配列。dbc_name– ターゲットのデータベースを決めるためのローカル名。table_prefix– ターゲットのデータベース名の前に付ける。 プレイスホルダー?:によって置き換えられます。
db_connect_to
db_connect_to($params, $name);
パラメーター
$name– データベース名。$params– 追加の接続パラメーターの配列。dbc_name– ターゲットのデータベースを決めるためのローカル名。[table_prefix]– ターゲットのデータベースのテーブル名の前に付ける。プレイスホルダー?:によって置き換えられます。デフォルト値はdb_initiateメソッドの$paramsで使われるtable_prefixです。
これらの関数を呼び出したら、リクエストは新しいデータベースに対して処理されます。
$params = array(
'dbc_name' => 'backup',
'table_prefix' => 'cscart'
);
db_initiate('localhost', 'db_user', 'db_password', 'cscart_backup', $params);
db_connect_to($params, 'cscart_backup');
$data = db_get_array("SELECT * FROM ?:products");
この例では、$data はローカルホスト上のデータベースcscart_backupの cscart_productsテーブルのデータを含んでいます。
プレースホルダを使用してデータベースクエリを構築する
CS-Cart のデータベースクエリは、プレースホルダを使用して作成されます。
異なるプレースホルダは異なる目的を果たします。たとえば、整数値を持つデータベースフィールド(order_id, product_id等)を参照する場合は、「?i」 や「?n」といったプレースホルダを使用します。テキスト値を格納できるフィールドの場合は、代わりに「?s」や「?a」を使用します。
使用可能なプレースホルダ
?u
このプレースホルダは、データを更新するための配列を格納します。
- 使用可能なデータ:配列
- 使用例
$data = array (
'payment_id' => 5
);
$order_id = 3;
db_query('UPDATE ?:orders SET ?u WHERE order_id = ?i', $data, $order_id);
- 結果クエリ
UPDATE cscart_orders SET payment_id = '5' WHERE order_id = 3;
?e
このプレースホルダは、データを挿入するための配列を格納します。
- 使用可能なデータ:配列
- 使用例
$data = array (
'payment_id' => 5,
'order_id' => 3
);
db_query('INSERT INTO ?:orders ?e', $data);
- 結果クエリ
INSERT INTO cscart_orders (payment_id, order_id) VALUES ('5', '3');
?i
このプレースホルダは、データを整数に変換します。
- 使用可能なデータ:文字列、数値
- 使用例
$order_id = 4;
db_query('SELECT * FROM ?:orders WHERE order_id = ?i', $order_id);
- 結果クエリ
SELECT * FROM cscart_orders WHERE order_id = 4;
?s
このプレースホルダは、データを(スラッシュを追加して)文字列に変換します。
- 使用可能なデータ:文字列、数値
- 使用例
$product_code = 'adasd';
db_query('SELECT * FROM ?:products WHERE product_code = ?s', $product_code);
- 結果クエリ
SELECT * FROM cscart_products WHERE product_code = 'adasd';
?l
このプレースホルダは、LIKE演算子(バックスラッシュをダブルバックスラッシュで置き換え、さらにスラッシュを加える)に代入するために、データを文字列に変換します。
- 使用可能なデータ:文字列
- 使用例
$piece = '%black\white%';
db_query('SELECT * FROM ?:product_descriptions WHERE product LIKE ?l', $piece);
- 結果クエリ
SELECT * FROM cscart_product_descriptions WHERE product LIKE '%black\\\\white%';
?d
このプレースホルダは、データを浮動小数点数に変換します。
- 使用可能なデータ:文字列、数値
- 使用例
$list_price = '123.345345';
db_query('SELECT * FROM ?:products WHERE list_price = ?d', $list_price);
- 結果クエリ
SELECT * FROM cscart_products WHERE list_price = '123.35';
?a
このプレースホルダは、 IN () 句で使用するデータを文字列の集合として準備します。
- 使用可能なデータ:文字列、数値、変数
- 使用例
$product_codes = array('EAN123', 'EAN234');
db_query('SELECT * FROM ?:products WHERE product_code IN (?a)', $product_codes);
- 結果クエリ
SELECT * FROM cscart_products WHERE product_code IN ('EAN123', 'EAN234');
?n
このプレースホルダは、 IN () 句で使用するデータを整数の集合として準備します。
- 使用可能なデータ:文字列、数値、変数
- 使用例
$order_id = '123.45';
db_query('SELECT * FROM ?:orders WHERE order_id IN (?n)', $order_id);
- 結果クエリ
SELECT * FROM cscart_orders WHERE order_id IN (123);
?p
- 使用可能なデータ:文字列、数値、変数
- 使用例
$order_id = 'order_id = 4';
db_query('SELECT * FROM ?:orders WHERE ?p', $order_id);
- 結果クエリ
SELECT * FROM cscart_orders WHERE order_id = 4;
?w
このプレースホルダは、WHERE句で使える準備されたデータを挿入します。
- 使用可能なデータ:変数
- 使用例
$data = array (
'payment_id' => 5,
'order_id' => 3
);
db_query('SELECT * FROM ?:orders WHERE ?w', $data);
- 結果クエリ
SELECT * cscart_orders WHERE payment_id = '5' AND order_id = '3';
演算子
?w プレースホルダは、次の演算子をサポートしています。: =, !=, >, <, <=, >=, <>, LIKE, NOT LIKE, IN, NOT IN, NULL.
受け入れられた配列例
$data = array (
field => value,
array(field, operator, value)
);
fieldは、テーブルのフィールド名です。valueは、値の条件です。operatorは、条件のオペレーターです。
| 演算子 | valueの必須タイプ |
|---|---|
NOT IN, NOT LIKE | 変数 |
NULL | 論理型 |
key => value として渡された配列は、以下のルールで拡張されます。
valueがnull の場合、value = trueのNULL演算子が使われます。valueが配列の場合、IN演算子が使われます。- それ以外の場合、
=演算子が使われます。
使用例
$data = array(
'field1' => 100,
'field2' => '200',
'field3' => null,
'field4' => array(100, 'value'),
array('field5', '<=', 200),
array('field6', 'NOT IN', array(100, 'value')),
array('field7', '!=', 300),
array('field8', 'NULL', false)
);
db_query('SELECT * FROM ?:orders WHERE ?w', $data);
結果クエリ
SELECT * cscart_orders
WHERE
field1 = 100 AND field2 = 200
AND field3 IS NULL AND field4 IN (100, 'value')
AND field5 <= 200 AND field6 NOT IN (100, 'value')
AND field7 != 300 AND field8 IS NOT NULL
?f
このプレースホルダは、変数の値が有効なフィールド名であるかどうかをチェックします。有効でない場合は空文字列を返します。
- 使用例
$data = 'payment@id';
db_query('SELECT * FROM ?:orders WHERE ?f = 5', $data);
- 結果クエリ
SELECT * FROM cscart_orders WHERE = 5;
?m
このプレースホルダは、テーブルに複数の新規レコードを挿入できます。
- 使用例
$data = array(
array(
'payment_id' => 5,
'order_id' => 3
),
array(
'payment_id' => 5,
'order_id' => 4
),
);
db_query('INSERT INTO ?:orders ?m', $data);
- 結果クエリ
INSERT INTO cscart_orders (payment_id, order_id) VALUES ('5', '3'),('5', '4');
?t
このプレースホルダーは、データを小数点以下3桁の10進数に変換します。
- 使用可能なデータ:文字列、数値、変数
- 使用例
$product_weight = '1.120';
db_query('SELECT * FROM ?:shippings WHERE min_weight >= ?t', $product_weight);
- 結果クエリ
SELECT * FROM cscart_shippings WHERE min_weight >= 1.120;
