php mysql预处理_PHP MySQL 预处理语句

预处理语句对于防止 MySQL 注入是非常有用的。

SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

预处理语句及绑定参数

预处理语句用于执行多个相同的 SQL 语句,并且执行效率更高。

预处理语句的工作原理如下:

1.    预处理:创建 SQL 语句模板并发送到数据库。预留的值使用参数 "?" 标记 。例如:

INSERTINTOMyGuests (firstname, lastname, email) VALUES(?, ?, ?)

2.    数据库解析,编译,对SQL语句模板执行查询优化,并存储结果不输出。应用可以多次执行语句,如果参数的值不一样。

3.    执行:最后,将应用绑定的值传递给参数("?" 标记),数据库执行语句。

相比于直接执行SQL语句,预处理语句有两个主要优点

·    预处理语句大大减少了分析时间,只做了一次查询(虽然语句多次执行)。

·    绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句。

·    预处理语句针对SQL注入是非常有用的,因为参数值发送后使用不同的协议,保证了数据的合法性。

MySQLi 预处理语句

以下实例在 MySQLi 中使用了预处理语句,并绑定了相应的参数:<?php

header("Content-type:text/html;charset=utf-8");    //设置编码

$servername = "localhost";

$username = "root";

$password = "root";

$dbname = "test";

// 创建连接

$conn = new mysqli($servername, $username, $password, $dbname);

// 检测连接

if ($conn->connect_error) {

die("连接失败: " . $conn->connect_error);

}

// 预处理及绑定

$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)");

$stmt->bind_param("sss", $firstname, $lastname, $email);

// 设置参数并执行

$firstname = "John";

$lastname = "Doe";

$email = "john@example.com";

$stmt->execute();

$firstname = "Mary";

$lastname = "Moe";

$email = "mary@example.com";

$stmt->execute();

$firstname = "Julie";

$lastname = "Dooley";

$email = "julie@example.com";

$stmt->execute();

echo "新记录插入成功";

$stmt->close();

$conn->close();

?>

解析以下实例的每行代码:"INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)"

在 SQL 语句中,我们使用了问号 (?),在此我们可以将问号替换为整型,字符串,双精度浮点型和布尔值。

接下来,让我们来看下 bind_param() 函数:$stmt->bind_param("sss", $firstname, $lastname, $email);

该函数绑定了 SQL 的参数,且告诉数据库参数的值。 "sss" 参数列处理其余参数的数据类型,上面有几个(?),下面就要有几个数据类型,s 字符告诉数据库该参数为字符串。

参数有以下四种类型:

·   i - integer(整型)

·  d- double(双精度浮点型)

·    s - string(字符串)

·  b - BLOB(binary large object:二进制大对象)

每个参数都需要指定类型。

关于怎么指定数据类型,在上一节已经做了介绍

通过告诉数据库参数的数据类型,可以降低 SQL 注入的风险。

上面的代码执行结果:新记录插入成功

看看你的数据有没有插入成功?

实例

让我们将表单里的数据插入数据库

首先一个HTML 页面html>

PHP中文网

Firstname: 

Lastname: 

email: 

提交到 php 页面<?php

header("Content-type:text/html;charset=utf-8");    //设置编码

$servername = "localhost";

$username = "root";

$password = "root";

$dbname = "test";

// 创建连接

$conn = new mysqli($servername, $username, $password, $dbname);

// 检测连接

if ($conn->connect_error) {

die("连接失败: " . $conn->connect_error);

}

// 预处理及绑定

$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)");

$stmt->bind_param("sss", $firstname, $lastname, $email);

// 设置参数并执行

$firstname = $_POST['firstname'];

$lastname =$_POST['lastname'];

$email = $_POST['email'];

$stmt->execute();

echo "新记录插入成功";

$stmt->close();

$conn->close();

?>

通过上面的两个程序,就可以将我们表单里的数据插入到数据库了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/561136.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

final关键字_深入分析Java中的final关键字

Java中被final修饰的变量与普通变量有何区别&#xff1f;被final修饰的变量不可更改、被final修饰的方法不可重写是怎样做到的&#xff1f;带着疑问我们一点点拨开云雾。一、final的内存定义及规则对于final关键字&#xff0c;编译器、处理器从读写两个角度限制了其使用规则&am…

嵌入式和fpga哪个好前景_Java 和 go 哪个就业前景好一点?面向金钱编程,这个回答太现实...

有个朋友问我&#xff1a;ava 和 go 哪个就业前景好一点&#xff1f;现在纠结中&#xff0c;差不多一年半就要毕业了。我也问了几个朋友程序员朋友&#xff1a;朋友A: 可以参考 Boss 直聘&#xff0c;面向金钱编程&#xff0c;我身边的 Java 都是 15k 左右&#xff0c;反正干就…

php解决mysql主从同步_Mysql读写分离,主从同步实现

随着用户量的增多&#xff0c;数据库操作往往会成为一个系统的瓶颈所在&#xff0c;因此我们可以通过实现数据库的读写分离来提高系统的性能。通过设置主从数据库实现读写分离&#xff0c;主库负责“写”操作&#xff0c;从库负责“读”操作&#xff0c;根据压力情况&#xff0…

python创建数组的方法_numpy创建array的方法汇总

创建numpy.array&#xff0c;是使用numpy这个核武器的基础&#xff0c;本文尽量汇总常用创建numpy.array的方法。array函数>>> import numpy as np>>> a np.array([1,2,3,4,5])>>> aarray([1, 2, 3, 4, 5])>>> a.shape(5,)>>> a…

mysql_install_db is deprecated_MySQL5.7源码安装问题汇总

编译安装mysql5.7版本&#xff0c;想试用一下新的版本特性&#xff0c;发现跟之前的5.6版本编译有了一些变化&#xff0c;总结一下避免以后继续入坑。5.6安装方式cmake版本5.7编译cmake要求版本最低为2.8&#xff0c;当前为2.6&#xff0c;所以需要升级cmake版本。信息如下shel…

验证码图片显示不出来怎么办_pr 的蒙版不显示了怎么办?

小白自学pr一路会遇到很多坑&#xff0c;我也是在一个个坑里爬过的。画好的蒙版不显示了&#xff0c;这只能算是一个小坑。解决方法很简单&#xff0c;只需要记住一条&#xff1a;在pr里想要调整或者显示什么东西&#xff0c;首先必须要选中它。举例说明&#xff1a;我给小猫的…

gb2312编码表_汉字编码输入系统模型(一)

通过前面介绍的通信系统模型来分析汉字编码输入系统&#xff0c;将汉字编码输入系统的特殊性整合到通信系统模型中&#xff0c;从而建立起一种基于信息论的汉字编码输入系统模型&#xff08;参见图3.2&#xff09;&#xff0c;以便指导我们的汉字编码输入实践&#xff0c;设计和…

python dict hash_【python-dict】dict的使用及实现原理

以下内容是针对&#xff1a;python源码剖析中的第五章——python中Dict对象 的读书笔记(针对书中讲到的内容进行了自己的整理&#xff0c;并且针对部分内容根据自己的需求进行了扩展)一、Dict的用法Dict的对象在使用到了所谓的关联关系的时候&#xff0c;就是通过key-value的形…

python参考文献_[zotero/python]库中参考文献条目删除后,清除残留PDF的脚本

更新&#xff1a;使用 滏阳河边捉蚯蚓 https://zhuanlan.zhihu.com/p/41297136上获取系统PDF文件和zotero.sqlite文件的代码&#xff0c;在此感谢&#xff01;在zotero的library中删除参考文献条目后&#xff0c;有时PDF不会同步删除&#xff0c;尤甚是安装了zotfile插件后&…

java中sql语句怎么把开始和结束时间作为参数写sql查询_JDBC数据库连接怎么操作?...

之前一直听说过JDBC&#xff0c;但从来不知道它是何物的小伙伴们看过来啦&#xff01;一、概述JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API&#xff0c;可以为多种关系数据库提供统一访问&#xff0c;它由一组用Java语言编写的类和接口组…

spring boot整合shiro继承redis_spring-boot-plus集成Shiro+JWT权限管理

SpringBootShiroJWT权限管理ShiroApache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。三个核心组件&#xff1a;Subject, Secur…

java 整数变负数_一文帮你读懂Java整数的存储原理

前言大家应该都知道&#xff0c;整数包括负数&#xff0c;零&#xff0c;和正数。在Java中&#xff0c;基本类型中byte(8位)、short(16位)、int(32位)、long(64位)属于整数&#xff0c;并且没有无符号数&#xff0c;均是有符号的。对于计算机来说&#xff0c;它只认识二进制&am…

server2019 sqlcmd命令安装_Ubuntu20.04LTS安装MS sql-server2019的方法

在本文中&#xff0c;我将向您展示如何在Ubuntu 20.04 Focal Fossa上安装Microsoft SQL Server。小广告&#xff1a;喜欢网络技术的朋友可以加W信&#xff1a;xfiles_sky一起学习进步。步骤一&#xff1a;更新ubuntu源sudo apt update && sudo apt upgrade步骤二&#…

servlet里面为什么有时候覆_为什么新来的经理强烈推荐?前后端分离知识,学到了...

引言前后端分离这个词相信大家都听过&#xff0c;不知道大家是怎么理解的呢。前阵子看项目的时候&#xff0c;有一段实现硬是没看懂&#xff0c;下面来给大家说一下一段愚蠢的经历哈。(我没正正式式写过前端&#xff0c;所以如果文章有错的地方希望可以在评论区友善交流~)一、交…

lamp 安装 mysql_linux lamp之离线安装mysql

Linux下自己创建目录/tigger上传mysql压缩包到此目录[rootlocalhost tigger]# tar zxvf mysql.tar.gz[rootlocalhost tigger]# cp -r mysql /usr/local/mysql/usr/local/mysql 为安装目录cd /usr/local/mysql[rootlocalhost mysql]# groupadd mysql[rootlocalhost mysql]# user…

microstation添加txt文件_C开发实战-文件操作

文件概述文件几乎无处不在&#xff0c;主要分为磁盘文件和设备文件&#xff0c;典型的磁盘文件有文本文件和二进制文件&#xff0c;磁盘文件存储在外部存储介质(例如磁盘&#xff0c;硬盘&#xff0c;U盘等等)需要加载到内存中才能使用。无论是文本文件还是二进制文件在计算机内…

怎样配置mysql数据源_mysql怎样配置ODBC数据源

选中 sqlserver选择默认连接的数据库 7、配置完成&#xff0c;可以测试连接 扩展资料&#xff1a; spring中配置数据源的几种常见方式&#xff1a;工具/原料 事先配置相应的环境mysql(mysql安装程序)mysql-connector-odbc-3.51.20-win32.exe(mysql数据源dobc安装程序) 步骤/方法…

python开发框架大全_最受欢迎 Top 12 Python 开源框架,你都用过吗?

作者 | 学Python的阿勇责编 | 夕颜出品 | CSDN博客今天给大家带来了12个在GitHub等开源网站中最受欢迎的Python开源框架。如果你正在学习python&#xff0c;那么这12个开源框架&#xff0c;千万别错过&#xff0c;这些框架包括事件I/O&#xff0c;OLAP&#xff0c;Web开发&…

python中的zip是什么意思_Python的zip()函数是什么

zip() 函数可以把两个列表“压缩”成一个 zip 对象(可迭代对象)&#xff0c;这样就可以使用一个循环并行遍历两个列表。为了测试 zip() 函数的功能&#xff0c;我们可以先在交互式解释器中“试验”一下该函数的功能。>>> a [a,b,c]>>> b [1, 2, 3]>>…

python 子线程返回值_python-从线程返回值

python-从线程返回值我如何获得一个线程以将元组或我选择的任何值返回给Python中的父级&#xff1f;12个解决方案59 votes我建议您在启动线程之前实例化Queue.Queue&#xff0c;并将其作为线程的args之一传递&#xff1a;在线程完成之前&#xff0c;它.puts将其结果作为参数接收…