mysqli 预处理语句(prepared)

来源:互联网 发布:木工制图软件 编辑:程序博客网 时间:2024/05/25 23:58

     mysqli 函数据支持prepared 语句的使用,它们对于在执行大量具有不同数据的相同查询时,可以提高执行速度。他们也可以免受SQL 注入

    prepared 语句的基本思想是可以向mysql 发送需要执行的查询模板,然后在单独发送数据。我们可以向相同的prepared 语句发送大量相同的数据;这个特性对批处理的插入操作来说是非常有用的。

一.把mysqli 连接,单例封装到一个类里面

<?phpclass 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 下面我们就讲解这个语句吧
<?phprequire_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;

当设置查询时不是替换前面已经生成的变量,而是在每一段数据的位置设置问好,在这些问号的周围,不能在设置问号或其他的分界符号

$stmt = $db->getDbconn ()->prepare ( $query );      构建一个语句对象或需要用来完成实际处理的资源

$stmt->bind_param()  告诉php那些变量应该被问号所代替,第一个参数是一个格式化字符串,与printf()使用的格式化字符串不同。在这里,所指替代问号变量的类型,s 表示

字符串  d 表示双精度 i表示整数  b表示 blog 在这个参数后,必须列出与语句中的问号数量相同的变量。他们将依次被替换.

$stmt->execute(); 函数 将真正运行这个查询。我们可以访问受影响行数并关闭这个语句。

0 0
原创粉丝点击