php mysqliの前処理パラメータをバインドする方法
<br /> /**<br /> * php中预处理执行sql<br /> * $sql[String] sql语句<br /> * $args[array] 参数<br /> */<br /> public function exeSql($sql,$args){<br /> $mysqli_stmt=$mysqli->prepare($sql);<br /> //由于$sql由调用者传入,所以sql语句和参数个数都不确定<br /> //疑问1:怎么获取参数类型呢?php中有没有相应的函数呢?<br /> //如果没有我用如下方法:getParamTypeStr($arr)是否可行呢?有什么好的建议吗?<br /> //疑问2:怎么绑定参数呢?如下为参数个数确定时的绑定方法。<br /> //$mysqli_stmt->bind_param("ssi","xx","xx",20);<br /> $mysqli_stmt->execute();<br /> $mysqli->close();<br /> }<br /> <br /> private function getParamTypeStr($arr){<br /> $count = count($arr);<br /> $typestr = "";<br /> for($i = 0; $i<$count; $i++){<br /> $type = gettype($arr[$i]);<br /> switch($type){<br /> case "integer":<br /> $typestr.= "i";<br /> break;<br /> case "float":<br /> case "double":<br /> $typestr.= "d";<br /> break;<br /> case "string":<br /> $typestr.= "s";<br /> break;<br /> }<br /> }<br /> return $typestr;<br /> }<br />
<br /> //java中预处理执行sql<br /> public void exeSql(String sql,Object[] args){<br /> PreparedStatement preparedStatement = connection.prepareStatement(sql);<br /> for(int i =0;i<args.length;i++){<br /> preparedStatement.setObject(i+1, args[i]);<br /> }<br /> preparedStatement.executeUpdate();<br /> connection.close();<br /> }<br />
$callback = array($mysqli_stmt, 'bind_param');<br /> // 将参数类型描述加入数组<br /> array_unshift($args, getParamTypeStr($args)); <br /> call_user_func_array($callback, $args);<br /> // 它的调用类似:<br /> $mysqli_stmt->bind_param(getParamTypeStr($args), $args[0], $args[1], $args[2] ...);
<?php<br /> <br /> /* 接続データベース クラス MysqlConnect */<br /> <br /> クラス MysqlConnect{<br /> プライベート $dbhost=null;<br /> プライベート $dbuser=null;<br /> プライベート $dbpwd=null;<br /> プライベート $dbname=null;<br /> プライベート $dbport=null;<br /> プライベート $ifpdo=null;<br /> プライベート $dburi=null;<br /> private $handler=null;<br /> <br /> <br /> function __construct($dbhost,$dbuser,$dbpwd,$dbname,$dbport,$ifpdo,$dburi){<br /> $this->dbhost=$dbhost;<br /> $this->dbuser=$dbuser;<br /> $this->dbpwd=$dbpwd;<br /> $this->dbname=$dbname;<br /> $this->dbport=$dbport;<br /> $this->ifpdo=$ifpdo;<br /> $this->dburi=$dburi;//PDO の URI パラメータについては、マニュアルを確認できます <br> if($this->ifpdo==1){//データベースを操作するために PDO を呼び出すことを示します<br> $this->handler=$this->CreatePdo();<br> }elseif($this->ifpdo==0){//ここに MYSQLI メソッドを記述できます<br> $this->handler=null;<br> }<br> }<br> /* -----ここが入り口です---------- */<br> //@param sql: 外部から呼び出すときに渡される完全な SQL ステートメント <br> //@param bindingArray: SQL ステートメントに関連するバインド パラメーター配列。PDO プレースホルダーがない場合は空になります <br> //@param アクション: 操作パラメーターを渡します。「select」/「update」/「delete」/「insert」<br> パブリック関数 exeSql($sql,$bindArray=array(),$action=""){ <br><div class="clear"></div>