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预处理的包装的更多相关文章

  1. mysqli预处理和事务处理

    1 应用环境 mysqli预处理功能(大量数据处理时使用) 2 步骤 a)mysqli连接数据库 $mysqli = new mysqli('localhost','root','root','chu ...

  2. php+mysqli预处理技术实现添加、修改及删除多条数据的方法

    本文实例讲述了php+mysqli预处理技术实现添加.修改及删除多条数据的方法.分享给大家供大家参考.具体分析如下: 首先来说说为什么要有预处理(预编译)技术?举个例子:假设要向数据库添加100个用户 ...

  3. mysqli 预处理语句

    预处理语句用于执行多个相同的 SQL 语句,并且执行效率更高. <?php // 设置编码格式 header('content-type:text/html;charset=utf-8'); / ...

  4. php mysqli 预处理操作数据库

    用到的SQL表 CREATE TABLE `student_01` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) CHARAC ...

  5. php mysqli扩展之预处理

    在前一篇 mysqli基础知识中谈到mysqli的安装及基础操作(主要是单条sql语句的查询操作),今天介绍的是mysqli中很重要的一个部分:预处理. 在mysqli操作中常常涉及到它的三个主要类: ...

  6. PHP(Mysqli和PDO)预处理

    PHP预处理主要是用来防SQL注入的,开发程序的都明白这样一个道理,不能相信用户的任何输入,如果用户输入问题你没有做相应的安全, 那么:你的程序是很危险的,很容易被攻击的!预处理:只分析两个:mysq ...

  7. PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD)

    原文: PHP5: mysqli 插入, 查询, 更新和删除  Insert Update Delete Using mysqli (CRUD) PHP 5 及以上版本建议使用以下方式连接 MySQL ...

  8. mysqli 操作数据库(转)

    从php5.0开始增加mysql(i)支持 , 新加的功能都以对象的形式添加 i表示改进的意思 功能多.效率高.稳定 编译时参数: ./configure --with-mysql=/usr/bin/ ...

  9. mysqli 操作数据库

    从php5.0开始增加mysql(i)支持 , 新加的功能都以对象的形式添加 i表示改进的意思 功能多.效率高.稳定 编译时参数: ./configure --with-mysql=/usr/bin/ ...

随机推荐

  1. Let'sencrypt认证的网站Https配置

    推荐使用这个脚本,具体说明里面都有 https://github.com/xdtianyu/scripts/tree/master/le-dns 它是通过调用dns服务商的api更新txt记录实现,无 ...

  2. SQL 比较中文字符串

    /* declare @str1 varchar(200),@str2 varchar(200) set @str1=N'江西省南昌市其它区高新区火炬大道809号' set @str2=N'江西省南昌 ...

  3. ASP.NET中使用Server.Transfer()方法在页间传值 实例

    以下代码在VS2008中测试通过 <%@ Page Language="C#" AutoEventWireup="true" CodeFile=" ...

  4. iOS本地推送与远程推送详解

    一.简介 分为本地推送和远程推送2种.可以在应用没有打开甚至手机锁屏情况下给用户以提示.它们都需要注册,注册后系统会弹出提示框(如下图)提示用户是否同意,如果同意则正常使用:如果用户不同意则下次打开程 ...

  5. php 数据库并发处理

    在并行系统中并发问题永远不可忽视.尽管PHP语言原生没有提供多线程机制,那并不意味着所有的操作都是线程安全的.尤其是在操作诸如订单.支付等业务系统中,更需要注意操作数据库的并发问题. 接下来我通过一个 ...

  6. Android OpenGL ES(五)GLSurfaceView .

    Android OpenGL ES 相关的包主要定义在 javax.microedition.khronos.opengles    GL 绘图指令 javax.microedition.khrono ...

  7. myeclipse 2013 SR2 安装svn

    1.下载SVN-site-1.8.22.zip 2.找到MyEclipse安装路径 我的是F:\tool\myeclipse2013\dropins,复制SVN-site-1.8.22.zip到此文件 ...

  8. CDockablePane使用总结

    基于 http://blog.csdn.net/kikaylee/article/details/8936953 CDockablePane的基本布局和用法 新建一个SDI工程,在CMainFrame ...

  9. Java中的值栈

    OGNL表示式使用 和 值栈 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts2框架使用OGNL作为默认的表达式 ...

  10. excel转化为Json

    Sheet sheet;        Workbook book;        Cell cell1,cell2,cell3,cell4;        JSONArray jsonArray = ...