Daily Archives: 2008 年 10 月 10 日
MySQLの更新系SQLを省略する(autoExecute)
MySQLでinsertとかUpdateとかするときに、
SQLをかかずにサクサクやる方法があるそうな。
その名も「autoExecute」なり。
Insertしたい場合には、以下のような書き方になるようです。
$test1 = “test”;
$table = “mysql_test_table”$Connect = DB::connect($Dsn);
if (DB::iserror($Connect)){
die($Connect->getMessage());
}$Value = array(
‘name’ => ‘hattara’,
‘domain’ => ‘teclog.hattara.info’,
‘col1′ => $test1,
‘col2′ => ‘test2′
);$Result = $Connect->autoExecute($table, $Value, DB_AUTOQUERY_INSERT);
if (PEAR::isError($Result)) {
die($res->getMessage());
}$Connect->disconnect();
Updateしたい場合には、以下のような書き方になるようです。
$test1 = “test”;
$table = “mysql_test_table”
$xxxx = “xxxxx”$Connect = DB::connect($Dsn);
if (DB::iserror($Connect)){
die($Connect->getMessage());
}$Value = array(
‘name’ => ‘hattara’,
‘domain’ => ‘teclog.hattara.info’,
‘col1′ => $test1,
‘col2′ => ‘test2′
);$Where = “col1 = ‘abcde’ AND col2 = ‘” . $xxxx . “‘”;
$Result = $db->autoExecute($table, $Value, DB_AUTOQUERY_UPDATE, $Where);
if (PEAR::isError($Result)) {
die($res->getMessage());
}$Connect->disconnect();
まあ、要するに、
autoExecute(
<テーブル名>,
<変更カラム名と値の連想配列>,
<処理指定>,
< updateならwhereがあれば>
);
となりますね。<処理指定>の場所には、
insertなら「DB_AUTOQUERY_INSERT」
updateなら「DB_AUTOQUERY_UPDATE」
が入るわけです。
ただし、残念でならないのが、updateをする場合に、where句を指定できるのですが、
これがプレースホルダに対応していない。
なので、上記のwhereの部分で、変数部分にはエスケープ処理を入れないといけない。
なんか、あと一味足りない感じですね。