PHP 对MySQLI预处理的包装
mysql 类
<?php
class Mysql {
private static $instance;
private $link;
private $query;
private $stmt;
private $param;
// 初始化
private function __construct() {
$this->link = @new mysqli('localhost', 'root', 'chenshuo90909', 'temp');
if(mysqli_connect_errno()) {
echo "MySQL connect error!"; exit();
}
return $this->link;
}
// 单例模式
public static function instance() {
if(isset(self::$instance)){
return self::$instance;
} else {
self::$instance = new self();
return self::$instance;
}
}
// 预处理SQL
private function prepare($query) {
$this->query = $query;
$this->stmt = $this->link->prepare($this->query);
if($this->stmt) {
return $this->stmt;
} else {
echo "Stmt error!"; exit;
}
}
// 值绑定
private function bind_value($array) {
$data = array();
foreach ($array as $key => $value) {
$data[$key] = &$array[$key];
}
return $data;
}
// 执行
public function execute($query, $param) {
$this->query = $query;
$this->stmt = $this->link->prepare($this->query);
$this->param = $param;
call_user_func_array(array($this->stmt, 'bind_param'), $this->bind_value($this->param)); //绑定参数
$result = $this->stmt->execute();
var_dump($result);
}
// 返回单挑数据
public function find($query, $param) {
$this->query = $query;
$this->param = $param;
$this->stmt = $this->link->prepare($this->query);
//绑定参数
call_user_func_array(array($this->stmt, 'bind_param'), $this->bind_value($this->param));
$this->stmt->execute();
$meta = $this->stmt->result_metadata();
// 将结果绑定数组元素设置为引用状态
while ($field = $meta->fetch_field()) {
$parameters[] = &$row[$field->name];
}
//绑定结果
call_user_func_array(array($this->stmt, 'bind_result'), $this->bind_value($parameters));
while ($this->stmt->fetch()) {
$result = $row;
}
return $result;
}
// 返回多条数据
public function fetch($query, $param) {
$this->query = $query;
$this->param = $param;
$this->stmt = $this->link->prepare($this->query);
//绑定参数
call_user_func_array(array($this->stmt, 'bind_param'), $this->bind_value($this->param));
$this->stmt->execute();
$meta = $this->stmt->result_metadata();
// 将结果绑定数组元素设置为引用状态
while ($field = $meta->fetch_field()) {
$parameters[] = &$row[$field->name];
}
//绑定结果
call_user_func_array(array($this->stmt, 'bind_result'), $this->bind_value($parameters));
// 有多行记录时将多行记录存入$results数组中.
while ($this->stmt->fetch()) {
$data = array();
foreach ($row as $key => $value) {
$data[$key] = $value;
}
$result[] = $data;
}
return $result;
}
// SQL语句调试
public function debug() {
return $this->query;
}
// 释放资源
public function __destruct() {
$this->stmt->close();
$this->link->close();
}
}
?>
应用:
<?php
include 'mysql.php';
class Data { const INSERT = "INSERT INTO user (username, password)VALUES(?, ?)";
const UPDATE = "UPDATE user SET username = ? WHERE uid = ?";
const SELECT = "SELECT username, password FROM user WHERE username = ? AND password = ?";
const DELETE = "DELETE FROM user WHERE uid = ?"; private $db; public function __construct() {
$this->db = Mysql::instance();
} public function insert($username, $password) {
$query = self::INSERT;
$param = array('ss',$username, $password);
$result = $this->db->execute($query, $param);
return $result;
} public function delete($uid) {
$query = self::DELETE;
$param = array('i',$uid);
$result = $this->db->execute($query, $param);
return $result;
} public function update($username, $uid) {
$query = self::UPDATE;
$param = array('si',$username, $uid);
$result = $this->db->execute($query, $param);
return $result;
} public function select($username, $password) {
$query = self::SELECT;
$param = array('ss',$username, $password);
$result = $this->db->find($query, $param);
return $result;
} public function find($username, $password) {
$query = self::SELECT;
$param = array('ss',$username, $password);
$result = $this->db->find($query, $param);
return $result;
} } $data = new Data(); //$data->insert('chenshuox', 'chenshuo123');
//$data->delete(2);
//$data->update('tinys123', 1); $result = $data->find('chenshuox', 'chenshuo123');
echo $result['username'];
echo $result['password']; ?>
PHP 对MySQLI预处理的包装的更多相关文章
- mysqli预处理和事务处理
1 应用环境 mysqli预处理功能(大量数据处理时使用) 2 步骤 a)mysqli连接数据库 $mysqli = new mysqli('localhost','root','root','chu ...
- php+mysqli预处理技术实现添加、修改及删除多条数据的方法
本文实例讲述了php+mysqli预处理技术实现添加.修改及删除多条数据的方法.分享给大家供大家参考.具体分析如下: 首先来说说为什么要有预处理(预编译)技术?举个例子:假设要向数据库添加100个用户 ...
- mysqli 预处理语句
预处理语句用于执行多个相同的 SQL 语句,并且执行效率更高. <?php // 设置编码格式 header('content-type:text/html;charset=utf-8'); / ...
- php mysqli 预处理操作数据库
用到的SQL表 CREATE TABLE `student_01` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) CHARAC ...
- php mysqli扩展之预处理
在前一篇 mysqli基础知识中谈到mysqli的安装及基础操作(主要是单条sql语句的查询操作),今天介绍的是mysqli中很重要的一个部分:预处理. 在mysqli操作中常常涉及到它的三个主要类: ...
- PHP(Mysqli和PDO)预处理
PHP预处理主要是用来防SQL注入的,开发程序的都明白这样一个道理,不能相信用户的任何输入,如果用户输入问题你没有做相应的安全, 那么:你的程序是很危险的,很容易被攻击的!预处理:只分析两个:mysq ...
- PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD)
原文: PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD) PHP 5 及以上版本建议使用以下方式连接 MySQL ...
- mysqli 操作数据库(转)
从php5.0开始增加mysql(i)支持 , 新加的功能都以对象的形式添加 i表示改进的意思 功能多.效率高.稳定 编译时参数: ./configure --with-mysql=/usr/bin/ ...
- mysqli 操作数据库
从php5.0开始增加mysql(i)支持 , 新加的功能都以对象的形式添加 i表示改进的意思 功能多.效率高.稳定 编译时参数: ./configure --with-mysql=/usr/bin/ ...
随机推荐
- Hololens 开发环境配置
安装 Hololens SDK 转自 Vangos Pterneas, 4 Apr 2016 CPOL 5.00 (1 vote) vote 1vote 2vote 3vote 4vote 5 ...
- Redis 笔记
Redis是一个key-value存储系统.和Memcached类似,但是解决了断电后数据完全丢失的情况,而且她支持更多无化的value类型,除了和string外,还支持lists(链表).sets( ...
- C++左值
C++左值 左值参数是可被引用的数据对象.比如,变量,数组元素,结构成员,引用和解引用指针 非左值包含字面常量(用引号括起的字符串除外,它们是由地址表示的)和包含多项的表达式 在C语言里面左值最初指的 ...
- 常用的opengl函数(三)
glBlendFunc 定义像素算法. void WINAPI glBlendFunc(GLenum sfactor,GLenum dfactor); 参数编辑 sfactor 指定红绿蓝和 al ...
- 贪心<haonan>
题意: 有一列数,每次在相邻的两个书里面选择一个大数留下,同时ans+大数.问题是,求ans的最小值. 题解: 如果a[i]>a[i-1],那么ans+=a[i]; 如果a[i]>=a[i ...
- java 数据结构 队列的实现
java 数据结构队列的代码实现,可以简单的进行入队列和出队列的操作 /** * java数据结构之队列的实现 * 2016/4/27 **/ package cn.Link; import java ...
- redhat安装wine
在基于RedHat或Debian的系统上安装 Wine 1.7 原创:LCTT https://linux.cn/article-3723-1.html Wine,Linux上最流行也是最有力的软件, ...
- ubuntu apache2 流量限制模块
mod-bw is an Apache 2 module provided to solve the problem of limiting users’ and virtual hosts’ ban ...
- Vi 详细教程
进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件,并将光标置于最后 ...
- MJExtention
+ (NSDictionary *)mj_objectClassInArray { // key : 属性名 // value : 类名 return @{ @"dogs" : @ ...