PHP+MySQL的操作
来源:互联网 发布:苹果免费打电话软件 编辑:程序博客网 时间:2024/05/20 05:07
前言
PHP5以及以上版本建议使用以下的方式来连接MySQL
- MySQli
- PDO(PHP Data Objects)
Using MySQLi or PDO
MySQLi和PDO都有自己的优势:
PDO应用在12中不同的数据库上,而MySQLi只针对MySQL数据库。所以,如果你的项目需要在多种数据库中切换,建议使用PDO,这样你只需要修改连接字符串和部门查询语句即可。使用MySQLi,如果不同的数据库,你需要重新写所有的代码,包括查询。
两者都是面向对象,但MySQLi还提供了API接口
两者都支持预处理语句。预处理语句可以防止SQL注入,对于Web项目的安全性非常重要
MySQLi与PHP
a.在访问MySQL数据库之前,我们先要连接数据库
<?php$db_name = "localhost";$db_user = "root";$db_pass = "123456";//创建链接$conn = new mysqli($db_name, $db_user, $db_pass);if ($cone->connect_error) { die("Connection failed:".$conn->connect_error);}echo "Connected successfully";?>
b.关闭连接
$conn->close();
c.创建数据表
<?php$db_name = "localhost";$db_user = "root";$db_pass = "123456";//创建链接$conn = new mysqli($db_name, $db_user, $db_pass);if ($cone->connect_error) { die("Connection failed:".$conn->connect_error);}$sql = "CREATE TABLE test( id INT(16) UNSIGEND AUTO_INCREMENT PRIMARY KEY, firstname VARCHAR(30) NOT NULL, lastname VARCHAR(30) NOT NULL, email VARCHAR(50), reg_date TIMESTAMP)";if ($conn->query($sql) === true) { echo "Table MyGuests created successfully";} else { echo "Error creating table: " . $conn->error;}$conn->close();?>
d.预处理语句
预处理语句对于防止MySQl注入是非常有用的
预处理语句和绑定参数
预处理语句用于执行多个相同的SQL语句,并且执行效率更高
预处理语句的工作原理如下:
- 预处理:创建SQL语句模板并发送到数据库。预留的值使用参数”?”标记。例如:INSERT INTO test(firstname, lastname, email) VALUES(?, ?, ?)
- 数据库解析:编译,对SQL语句模板执行查询优化,并存储结果不输出
- 执行:最后,将应用绑定的值传递给参数(”?” 标记),数据库执行语句。应用可以多次执行语句,如果参数的值不一样。
相比较直接执行SQL语句,预处理主要有以下的优点:
- 预处理语句大大减少了分析时间,只做了一次查询(虽然语句多次执行)
- 绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句
- 预处理语句针对SQL注入是非常有用的,因为参数值发送后使用不同的协议,保证了数据的合法性
<?php//prepare and bind$stmt = $conn->prepare("INSERT INTO test(firstname, lastname, email) VALUES(?, ?, ?)");$stmt->bind_param("sss",$firstname, $lastname, $email);//设置参数并执行$firstname = "Mary";$lastname = "Moe";$email = "mary@example.com";$stmt->execute();$firstname = "Julie";$lastname = "Dooley";$email = "julie@example.com";$stmt->execute();//关闭$stmt->close();$conn->close();?>
解析以下实例的每行代码:
$stmt = $conn->prepare("INSERT INTO test(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(布尔值)
每个参数都需要指定类型。
通过告诉数据库参数的数据类型,可以降低 SQL 注入的风险。
e.读取数据
<?php $arr = array();//最后结果$sql = "SELECT id,firstname,lastname FROM test";$result = $conn->query($sql);if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { $arr[] = $row; }}?>
PDO与PHP
a.在访问数据库之前,先连接数据库(PDO需要提前安装)
<?php$db_name = "localhost";$db_user = "root";$db_pass = "123456";try { $conn = new PDO("mysql:host=$db_name;dbname=myDB", $db_user, $db_pass); echo "Connected successfully";}catch(PDOException $e) { echo $e->getMessage();}?>
b.关闭连接
$conn = null;
c.创建数据表
<?php$db_name = "localhost";$db_user = "root";$db_pass = "123456";try { $conn = new PDO("mysql:host=$db_name;dbname=myDB", $db_user, $db_pass); //set the PDO error mode to exception $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "CREATE TABLE test( id INT(16) UNSIGEND AUTO_INCREMENT PRIMARY KEY, firstname VARCHAR(30) NOT NULL, lastname VARCHAR(30) NOT NULL, email VARCHAR(50), reg_date TIMESTAMP )"; //use exec() because no result are returned $conn->exec($sql);}catch(PDOException $e) { echo $e->getMessage();}?>
d.预处理语句
//设置PDO错误模式为异常$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//预处理SQL并绑定参数$stmt = $conn->prepare(""INSERT INTO MyGuests (firstname, lastname, email) VALUES (:firstname, :lastname, :email)");$stmt->bindParam(':firstname', $firstname);$stmt->bindParam(':lastname', $lastname);$stmt->bindParam(':email', $email)// 插入其他行$firstname = "Mary";$lastname = "Moe";$email = "mary@example.com";$stmt->execute();// 插入其他行$firstname = "Julie";$lastname = "Dooley";$email = "julie@example.com";$stmt->execute();//关闭连接$conn = null;
e.读取数据
$stmt = $conn->prepare("SELECT * from test");$stmt->excute();//设置结果集为关联数组$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
- PHP+MySQL的操作
- PHP的MySQL操作
- php操作Mysql的方法
- php连接mysql的操作
- php+Mysql 的CRUD操作
- PHP简单的操作mysql
- php 的mysql操作类
- PHP操作MySQL数据库--PHP的应用
- [Lpp] PHP的MySQL的操作
- PHP操作MYSQL用“事务”的例子
- PHP的常用数据操作(MYSQL)
- 打包一个PHP操作MYSQL的类
- PHP操作mysql的幾種方法
- 操作MYSQL的一个PHP类
- 入门:PHP与MYSQL的结合操作
- php编程,针对MYSQL的操作类
- PHP操作mysql数据库的函数集合
- PHP操作mysql的类。分享一下!
- linux通过远程桌面访问windows
- Apache配置http访问转https
- 从数据库用户表在fastdfs文件系统批量创建头像一例
- iOS---如何把导航默认的返回按钮设置成“返回”
- C/C++面试题精选
- PHP+MySQL的操作
- UIGestureRecognizer手势识别详解
- List接口、ArrayList类和LinkedList类 笔记
- IOS 的 7 中手势的介绍 和详细使用(UIGestureRecognizer) UIScreenEdgePanGestureRecognizer
- centos6.4安装mysql5.5
- C算法--堆排序
- CFileDialog类无故崩溃的解决及原因分析
- Hive远程模式安装
- 如何快速正确的安装 Ruby, Rails 运行环境