PHPマニュアル/PEARマニュアル | ユーザフォーラムで議論/質問 | マニュアル検索 | ハイライト | ハイライトオフ | ポータル | php spot

導入 - autoPrepare & autoExecute | JavaScript入門&応用&リファレンスなら「JavaScriptist」

  

導入 - autoPrepare & autoExecute

導入 - autoPrepare & autoExecute – SQL 文を自動で組み立て、実行する

Description

目的

autoPrepare() および autoExecute() を使用することで、あのうんざりするような INSERT 文や UPDATE 文を書く必要がなくなります。例えばテーブルにフィールドを 追加したような場合に、いちいち書き直す必要もなくなります。

3 つのフィールド (id、name そして country) を持つ 'user' というテーブルがあるとしましょう。 この場合、以下のような SQL クエリを書くことになるでしょう。

INSERT INTO table (id, name, country) VALUES (?, ?, ?)
UPDATE table SET id=?, name=?, country=? WHERE ...

もしフィールド (たとえば 'birthYesr') を追加したとすると、 このクエリを書き直す必要があります。これはあまりにつまらない作業であり、 バグを生み出しやすいものです (もしひとつだけクエリを書き換えるのを 忘れたりしたら?)。

autoPrepare

autoPrepare() を使用すると、insert クエリや update クエリを書く必要がなくなります。例えば、

<?php
// $db という名前の DB オブジェクトを取得しているとします...
$table_name   'user';
$table_fields = array('id''name''country');

$sth $db->autoPrepare($table_name$table_fields,
                        
DB_AUTOQUERY_INSERT);

if (
PEAR::isError($sth)) {
    die(
$sth->getMessage());
}
?>

この例では、 autoPrepare() は次の SQL クエリを組み立てます。

INSERT INTO user (id, name, country) VALUES (?, ?, ?)

その後、 prepare() をコールします。

レコードを追加するには、以下のようにして execute() あるいは executeMultiple() を使用する必要があります。

<?php
// ... 上の例の続きです...
$table_values = array(1'Fabien''France');

$res =& $db->execute($sth$table_values);

if (
PEAR::isError($res)) {
    die(
$res->getMessage());
}
?>

そう、もはや SQL の INSERT クエリを 一切書かなくてもよくなるのです! UPDATE クエリについても同様です。 柔軟性を高めるため、クエリの WHERE 句についてだけは自分で書く必要があります。たとえばこのようになります。

<?php
// $db という名前の DB オブジェクトを取得しているとします...
$table_name   'user';
$table_fields = array('name''country');
$table_values = array('Bob''USA');

$sth $db->autoPrepare($table_name$table_fields,
                        
DB_AUTOQUERY_UPDATE'id = 1');

if (
PEAR::isError($sth)) {
    die(
$sth->getMessage());
}

$res =& $db->execute($sth$table_values);

if (
PEAR::isError($res)) {
    die(
$res->getMessage());
}
?>

autoPrepare() は、 次のようなクエリを組み立てます。

UPDATE user SET name=?, country=? WHERE id=1

その後、 prepare() をコールします。

何も WHERE 句を指定しなかった場合は、 テーブルのすべてのレコードが更新されてしまうことに注意しましょう。

autoExecute

insert クエリや update クエリを実行する一番簡単な方法は、 autoExecute() を使用することです。 これは autoPrepare() および execute() を組み合わせたものです。

必要なのは、フィールド名をキーとしてフィールドの値を対応させた 連想配列のみでず。例えばこのようになります。

<?php
// $db という名前の DB オブジェクトを取得しているとします...
$table_name 'user';

$fields_values = array(
    
'id'      => 1,
    
'name'    => 'Fabien',
    
'country' => 'France'
);

$res $db->autoExecute($table_name$fields_values,
                        
DB_AUTOQUERY_INSERT);

if (
PEAR::isError($res)) {
    die(
$res->getMessage());
}
?>

たったこれだけです! これで、次のようなクエリが組み立てられ、 そして実行されます。

INSERT INTO user (id, name, country)
  VALUES (1, 'Fabien', 'France')

UPDATE クエリの場合も同様です。

<?php
// $db という名前の DB オブジェクトを取得しているとします...
$table_name 'user';

$fields_values = array(
    
'name'    => 'Fabien',
    
'country' => 'France'
);

$res $db->autoExecute($table_name$fields_values,
                        
DB_AUTOQUERY_UPDATE'id = 1');

if (
PEAR::isError($res)) {
    die(
$res->getMessage());
}
?>

これは、次のようなクエリを組み立てて実行します。

UPDATE user SET name='Fabien', country='France'
  WHERE id = 1

何も WHERE 句を指定しなかった場合は、 テーブルのすべてのレコードが更新されてしまうことに注意しましょう。

$data に渡す値は、リテラルである必要があります。 SQL 関数 (例えば CURDATE() など) を渡さないでください。 実行時に処理される SQL 関数は、プリペアドステートメント内に記述する 必要があります。

忘却曲線を使ってこの知識を確実に記憶に残す

フォーラムで「導入 - autoPrepare & autoExecute」について話す
各種マニュアル: PHPマニュアル | PEARマニュアル | Smarty(英語)マニュアル | PHP-GTKマニュアル | 導入 - autoPrepare & autoExecute」をGoogle検索
copyright © 1997-2024 PHP ドキュメント作成グループ(ライセンス). provided by php spot. マニュアル: