• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

php mysqli 预处理 如何绑定参数

php 搞代码 3年前 (2022-01-24) 22次浏览 已收录 0个评论

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 /><p>+本文来源gao!%daima.com搞$代*!码9网(</p><strong>搞gaodaima代码</strong>					$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 />

我知道java中是通过如下方式实现的:

<br />    //java中预处理执行sql<br />	public void exeSql(String sql,Object[] args){<br />		PreparedStatement preparedStatement = connection.prepareStatement(sql);<br />        for(int i =0;i        	preparedStatement.setObject(i+1, args[i]);<br />        }<br />        preparedStatement.executeUpdate();<br />        connection.close();<br />	}<br />

哪位朋友帮忙解答下上面2点疑问,本人刚转php,看了文档,中有提及反射,不是很懂,也有朋友说通过替换sql中的’?’,还望朋友详细指点,最好能提供点核心代码。非常感谢!

——解决方案——————–
2.

$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] ...);

推荐你用PDO,mysqli的这个功能挺不好用的,PDO的bindParam()方法要直观的多
http://www.php.net/manual/en/pdostatement.bindparam.php
——解决方案——————–
我这里有一个我自己写的PHP的PDO类,你可以直接用:

<?php

/* 连接数据库类 MysqlConnect */

class MysqlConnect{
private $dbhost=null;
private $dbuser=null;
private $dbpwd=null;
private $dbname=null;
private $dbport=null;
private $ifpdo=null;
private $dburi=null;
private $handler=null;

function __construct($dbhost,$dbuser,$dbpwd,$dbname,$dbport,$ifpdo,$dburi){
$this->dbhost=$dbhost;
$this->dbuser=$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;
}
}
/* ----------------这里是入口--------------------- */
[email protected] sql:外部调用时传递的完整SQL语句
[email protected] bindArray:绑定的参数数组,与sql语句有关,如果没有PDO占位符此处为空
[email protected] action:传递操作参数,"select"/"update"/"delete"/"insert"
public function exeSql($sql,$bindArray=array(),$action=""){


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:php mysqli 预处理 如何绑定参数

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址