addslashesによるエスケープ処理は禁止
PEAR::DBであればDB::quote()という関数を利用
<?php class db_access { function set_dsn($dsn) { $this->dsn = $dsn; } var $dsn = null; var $_result = array(); var $conid = null; function do_connect() { require_once("DB.php"); $this->conid = DB::connect($this->dsn); if ( DB::isError($this->conid) ) { die ($this->conid->getMessage()); } } var $debuginfo; function do_getall($sql) { $result = $this->conid->getAll($sql,DB_FETCHMODE_ASSOC); //DB_FETCHMODE_ASSOC,DB_FETCHMODE_ORDERED if (DB::isError($result)) { $this->debuginfo = $result->getDebugInfo($result); $this->_result = null; return false; } else { $this->_result = $result; return true; } } function do_query($sql) { $result = $this->conid->query($sql); if (DB::isError( $result )) { $this->debuginfo = $result->getDebugInfo($result); $this->_result = null; return false; } else { $this->_result = $result; return true; } } function disconnect() { $this->conid->disconnect(); } function get_result() { return $this->_result; } function get_quote($str) { return $this->conid->quote($str); } } // 事前準備 // 手動で、 // createdb hoge // psql hoge // CREATE TABLE hoge (hoge text,insert_time timestamp); $db = new db_access; $db->set_dsn("pgsql://postgres:@localhost/hoge"); $db->do_connect(); //-------------------------------------------------------------- // select 文の練習 $str = $db->get_quote("1'2'3"); $query = "select {$str};"; print $query; print "\n"; if($db->do_getall($query)) { $data = $db->get_result(); print_r($data); } else { print $db->debuginfo; } //-------------------------------------------------------------- //省略版(失敗時のrollbackはphpまかせ)insert方法 // addslashesによるエスケープ処理は止めましょう // http://blog.ohgaki.net/index.php/yohgaki/2006/02/13/addslashesa_la_a_a_ua_sa_pa_fa_a_bc_a_ma // addslashesは使っちゃダメ => DB.phpのquoteにて対応 // http://www.phppro.jp/qa/68?sort=asc $hoge = $db->get_quote("1'2'3".time()); // quote処理と''(シングルクォート)を付与 $db->do_query("begin;"); $query = "insert into hoge(hoge,insert_time)values($hoge,now());"; print $query; print "\n"; $db->do_query($query); $db->do_query("commit;"); //-------------------------------------------------------------- $query = "select * from hoge where hoge = $hoge ;"; print $query; print "\n"; if($db->do_getall($query)) { $data = $db->get_result(); print_r($data); } else { print $db->debuginfo; } //-------------------------------------------------------------- // 厳密バージョン if($db->do_query("begin;")) { if($db->do_query("insert into hoge(insert_time)values(now());")) { if($db->do_query("commit;")) { print "登録完了\n"; } else { print $db->debuginfo; print "登録失敗1(commit失敗)\n"; } } else { print "登録失敗2(insert 失敗)\n"; print $db->debuginfo; $db->do_query("role back;"); } } else { print $db->debuginfo; print "登録失敗3(begin失敗)\n"; } $db->disconnect(); ?>
http://www.phppro.jp/qa/68?sort=asc
http://blog.ohgaki.net/index.php/yohgaki/2006/02/13/addslashesa_la_a_a_ua_sa_pa_fa_a_bc_a_ma