/** * php中预处理执行sql * $sql[string] sql语句 * $args[array] 参数 */ public function exesql($sql,$args){ $mysqli_stmt=$mysqli->prepare($sql); //由于$sql由调用者传入,所以sql语句和参数个数都不确定 //疑问1:怎么获取参数类型呢?php中有没有相应的函数呢? //如果没有我用如下方法:getparamtypestr($arr)是否可行呢?有什么好的建议吗? //疑问2:怎么绑定参数呢?如下为参数个数确定时的绑定方法。 //$mysqli_stmt->bind_param(ssi,xx,xx,20); $mysqli_stmt->execute(); $mysqli->close(); } private function getparamtypestr($arr){ $count = count($arr); $typestr = ; for($i = 0; $idbuser=$dbuser; $this->dbpwd=$dbpwd; $this->dbname=$dbname; $this->dbport=$dbport; $this->ifpdo=$ifpdo; $this->dburi=$dburi;//pdo的uri参数,可以查手册 if($this->ifpdo==1){//表示调用pdo来操作数据库 $this->handler=$this->createpdo(); }elseif($this->ifpdo==0){//这里可以写mysqli的方法 $this->handler=null; } } /* ----------------这里是入口--------------------- */ //@param sql:外部调用时传递的完整sql语句 //@param bindarray:绑定的参数数组,与sql语句有关,如果没有pdo占位符此处为空 //@param action:传递操作参数,select/update/delete/insert public function exesql($sql,$bindarray=array(),$action=){ $stmt=$this->handler->prepare($sql); $stmt->execute($bindarray); switch($action){ case select: return $stmt->fetch(pdo::fetch_assoc); break; case selectall: return $stmt->fetchall(pdo::fetch_assoc); break; case update: case delete: return $stmt->rowcount(); break; case insert: return $this->handler->lastinsertid(); break; case count: return $stmt->rowcount(); default: return ; } } public function query($sql){ return $this->handler->query($sql); } private function createpdo(){ try{ $handler=new pdo($this->dburi,$this->dbuser,$this->dbpwd); $handler->setattribute(pdo::attr_errmode,pdo::errmode_exception); return $handler; }catch(pdoexception $e){ $e->getmessage(); $this->handler=null; } } private function __get($args){ if($args=='handler'){ return $this->handler; } }}require(neo_a_p.'\data\sqlconfig.php');//这里是sql的连接文件,下面创建对象的时候需要的变量就是这个文件里要有的$handler=new mysqlconnect($dbhost,$dbuser,$dbpwd,$dbname,$dbport,$ifpdo,$dburi);?>
我这里有一个我自己写的php的pdo类,你可以直接用:
php code?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778……
调用的时候,直接require包含这个类,然后$handler就是操作对象
谢谢楼上2位热心的朋友。