mysqli 预处理语句(prepared)
mysqli 函数据支持prepared 语句的使用,它们对于在执行大量具有不同数据的相同查询时,可以提高执行速度。他们也可以免受SQL 注入
prepared 语句的基本思想是可以向mysql 发送需要执行的查询模板,然后在单独发送数据。我们可以向相同的prepared 语句发送大量相同的数据;这个特性对批处理的插入操作来说是非常有用的。
一.把mysqli 连接,单例封装到一个类里面
<?php
class Myconnect {
// 主机名
const HOSTNAME = "127.0.0.1";
// 用户名
const USERNAME = "root";
// 密码
const PASSWORD = "123456";
// 数据库名
const DBNAME = "liuxingyu";
// mysql 的编码
const MYSQL_CHARSET = "utf8";
private static $instance;
private $dbconn;
/**
* 私有构造方法
*/
private function __construct() {
$this->dbconn = mysqli_connect ( self::HOSTNAME, self::USERNAME, self::PASSWORD, self::DBNAME );
$this->dbconn->set_charset ( self::MYSQL_CHARSET );
}
/**
* 获取mysql 连接实例
*
* return @mysqli
*/
public function getDbconn() {
return $this->dbconn;
}
/**
* 放克隆
*/
private function __clone() {
}
/**
* 获取数据库的连接实例
*
* @return DBconnectsinglon
*/
public static function getDbinstance() {
if (! (self::$instance instanceof self)) {
self::$instance = new self ();
}
return self::$instance;
}
}
?>
=. 插入的prepared 下面我们就讲解这个语句吧
<?php require_once dirname ( __FILE__ ) . "/Myconnect.php"; $tilte = $_POST [title]; $content = $_POST [content]; $tim = time (); $db = Myconnect::getDbinstance (); $query = "insert into lxy(title,content,tim) values(?,?,?)"; $stmt = $db->getDbconn ()->prepare ( $query ); $stmt->bind_param ( sss, $tilte, $content, $tim ); $stmt->execute (); $ro = $stmt->affected_rows; echo $ro;
dbconn = mysqli_connect ( self::HOSTNAME, self::USERNAME, self::PASSWORD, self::DBNAME ); $this->dbconn->set_charset ( self::MYSQL_CHARSET ); } /** * 获取mysql 连接实例 * * return @mysqli */ public function getDbconn() { return $this->dbconn; } /** * 放克隆 */ private function __clone() { } /** * 获取数据库的连接实例 * * @return DBconnectsinglon */ public static function getDbinstance() { if (! (self::$instance instanceof self)) { self::$instance = new self (); } return self::$instance; } } ?> =. 插入的prepared 下面我们就讲解这个语句吧 getDbconn ()->prepare ( $query ); $stmt->bind_param ( sss, $tilte, $content, $tim ); $stmt->execute (); $ro = $stmt->affected_rows; echo $ro;
$stmt = $db->getDbconn ()->prepare ( $query ); 构建一个语句对象或需要用来完成实际处理的资源
$stmt->bind_param() 告诉php那些变量应该被问号所代替,第一个参数是一个格式化字符串,与printf()使用的格式化字符串不同。在这里,所指替代问号变量的类型,s 表示
字符串 d 表示双精度 i表示整数 b表示 blog 在这个参数后,必须列出与语句中的问号数量相同的变量。他们将依次被替换.
$stmt->execute(); 函数 将真正运行这个查询。我们可以访问受影响行数并关闭这个语句。
