PDO访问方式操作数据库

  mysqli是专门访问MySQL数据库的,不能访问其它数据库。PDO可以访问多种的数据库,它把操作类合并在一起,做成一个数据访问抽象层,这个抽象层就是PDO,根据类操作对应的数据库。mysqli是一个类,PDO也是一个类,只不过PDO这个类功能更加强大。

PDO的功能
1.访问不同的数据库
2.自带事务功能。事务是指同时执行几条sql语句,但是其中1条语句出了错无法执行,那么所有的就都执行失败。
3.防止SQL注入攻击。

1.访问不同数据库

下面代码是访问MySQL数据库的,如果访问其它数据库,只需要在造对象中更改数据库驱动mysql,换成其它数据库的驱动。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>

<body>
<?php
//PDO的用法
//1.造对象
$dsn = "mysql:dbname=text1;host=localhost";
//mysql是指MySQL数据库的驱动名,加上冒号,冒号后面是数据库的名称。
//host是服务器的地址,为localhost。
//如果要使用其它数据库,要更改数据库的驱动名。可以从php手册开面找。
//写的驱动一定是配好环境的驱动。可以在浏览器地址栏里输入服务器地址localhost查找支持的数据库驱动。
$pdo = new PDO($dsn,"root","666");
//参数:1.服务器的地址2.数据库的名称3.服务器密码

//写sql语句
$sql = "update nation set name=‘兽族‘ where code=‘n003‘";

//执行sql语句
//$r = $pdo->exec($sql);//返回受影响的条数
?>
</body>
</html>

2.事务功能

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>

<body>
<?php
//1.造对象
$dsn = "mysql:dbname=text1;host=localhost";
$pdo = new PDO($dsn,"root","666");

//设置异常模式,如果吹啊你错误,抛个异常出来。2个参数不要加双引号。
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

//写sql语句
$sql1 = "insert into nation values(‘noo5‘,‘人族‘)";
$sql2 = "insert into nation values(‘noo6‘,‘精灵族‘)";

//执行2条sql语句
try//try代表加事务
{
    $pdo->beginTransaction();//启动事务

    $pdo->exec($sql1);
    $pdo->exec($sql2);

    $pdo->commit();//提交事务
}
catch(PDOException $e)//抓住出现的异常。$e代表抓住的异常,异常保存在$e里面。
{
    //$e->getMessage();//获取错误信息。
    $pdo->rollBack();//回滚,如果一个地方出现错误,回到总体操作之前。
}

?>
</body>
</html>

3.防止注入

(1)占位方式为?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>

<body>
<?php
//防止sql注入

//1.造对象
$dsn = "mysql:dbname=text1;host=localhost";
$pdo = new PDO($dsn,"root","666");

//写sql语句,预处理语句。
$sql = "insert into nation values(?,?)";//变量先不写,先用?占住位置。先把这条语句发过去。

//准备sql语句,返回statement对象。
$st = $pdo->prepare($sql);

/*//绑定参数
$st->bindParam(1,$code);//从1开始索引。
$st->bindParam(2,$name);

$code="n002";//也可以在前面赋值。
$name="矮人族";

//提交执行
$st->execute();//调用这个方法就可以执行了,括号里面不用给sql语句了,sql语句已经传过去了。
*/

$attr = array("n007","魔族");//造一个数组,数组里面要和添加的内容对应起来。这2行相当于上面/**/标记的4行内容。

//提交执行
$st->execute($attr);//直接把数组放在执行的里面。

//预处理里面用?占位的,给数组的时候要给索引数组,并且数组里的内容要和要添加的内容对应起来。

?>
</body>
</html>

(2)占位方式为name

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>

<body>
<?php
//防止sql注入

//1.造对象
$dsn = "mysql:dbname=text1;host=localhost";
$pdo = new PDO($dsn,"root","666");

//写sql语句,预处理语句。使用name占位。
$sql = "insert into nation values(:code,:name)";//前面要加冒号,不加冒号会被当成普通的变量

//准备执行
$st = $pdo->prepare($sql);

/*//绑定参数
$st->bindParam(":code",$code,PDO::PARAM_STR);//PDO::PARAM_STR表示必须是一个字符串
$st->bindParam(":name",$name,PDO::PARAM_STR);

$code="no12";
$name="狼族";

//执行
$st->execute();*/

$attr = array("code"=>"n025","name"=>"虫族");//name占位,要用关联数组。

//执行
$st->execute($attr);

?>
</body>
</html>

4.读取数据

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>

<body>
<?php
//1.造对象
$dsn = "mysql:dbname=text1;host=localhost";
$pdo = new PDO($dsn,"root","666");

//写sql语句,预处理语句。使用name占位。
$sql = "select * from nation";//前面要加冒号,不加冒号会被当成普通的变量

//准备执行
$st = $pdo->prepare($sql);

//执行
$st->execute();

//读数据
//var_dump($st->fetch());//输出结果为第一条,可以用while循环全部读取出来。
//var_dump($st->fetch(PDO::FETCH_ASSOC));//输出的是关联数组
//var_dump($st->fetch());//输出二维数组
//var_dump($st->fetch(PDO::FETCH_ASSOC));//输出关联的二维数组
?>
</body>
</html>
时间: 2024-10-13 05:20:08

PDO访问方式操作数据库的相关文章

作用JavaScript访问和操作数据库

JS操作 Access 数据库 Js代码   <SCRIPT LANGUAGE="JavaScript"> <!-- var filePath = location.href.substring(0, location.href.indexOf("实例197.连接Access数据库.html"));    //以当前页面文件为基础,找到文件所在的绝对路径 var path = filePath + "197.mdb"; path

python_协程方式操作数据库

#!/usr/bin/python3 # -*- coding: utf-8 -*- import requests import gevent import pymysql from gevent import monkey # 堵塞标记 monkey.patch_all() class SqlSave(object): """协程方式写入数据库""" def __init__(self): SQL_DBA = { 'host': 'local

c# cs方式操作数据库 非使用sql连接字符串直接连接数据库

.net 底层数据库传输程序 分为服务器端与客户端 此程序作用有: 1.解决直连数据库有相当大的安全隐串. 2.大广域网使用时,大数据的查询相当的时候是耗在网速传输,这个解决了大数据量传输的问题.大数据量进行压缩可以 提高速度7~40倍. 3.由于此框架底层使用tcp作为连接,可以发即时消息.实时传文件.可以作为,程序提交表单,时时提醒功能. 4.兼容三层框架.三层框架程序几乎不需要改动就可以直接使用. 服务器端: 服务器端比较简单,几行代码就可以搞定 1. 添加引用 DataUtils.v1.

九、.net core用orm继承DbContext(数据库上下文)方式操作数据库

一.创建一个DataContext普通类继承DbContext 二.配置连接字符串(MySql/SqlServer都可以) using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace DotNetCore.Models { public class DataContext

Android中使用系统提供API数据访问接口操作数据库

数据的增加 1.创建一个SQLite数据的帮助类 SQLiteDatabase db = helper.getWritableDatabase(); 2.创建一个类似map集合的类ContentValues,用来存储键值对 ContentValues values = new ContentValues(); 3.把需要增加的数据存放进去 values.put("name", name); values.put("number", number); 4.执行系统提供

MFC,ADO方式实现数据库操作

参考: MSDN数据访问编程 (MFC/ATL): https://msdn.microsoft.com/zh-cn/library/kd4ck1tt.aspx?f=255&MSPPError=-2147217396 ado方式操作数据库封装类的使用范例: http://download.csdn.net/detail/xianglitian/2383423 使用ADO封装类的数据库程序开发实例: http://wenku.baidu.com/link?url=A3g4_Ucz1RuijQMZ8

CodeIgniter框架——访问方式 URI 分配变量 数据库操作

1.访问方式: CodeIgniter 的访问URL使用的是pathinfo,入口文件/控制器/方法(/参数列表) eg:localhost/index.php/welcome/index/id 第一段表示调用控制器类. 第二段表示调用类中的函数或方法. 第三及更多的段表示的是传递给控制器的参数,如 ID 或其它各种变量. 2.URI参数获取: 控制器端代码 1 public function getUri($id,$name,$year) 2 { 3 echo "id--->"

php pdo操作数据库

POD扩展是在PHP5中加入,该扩展提供PHP内置类 PDO来对数据库进行访问,不同数据库使用相同的方法名,解决数据库连接不统一的问题. PDO的特点: 性能.PDO 从一开始就吸取了现有数据库扩展成功和失败的经验教训.因为 PDO 的代码是全新的,所以我们有机会重新开始设计性能,以利用 PHP 5 的最新特性.能力.PDO 旨在将常见的数据库功能作为基础提供,同时提供对于 RDBMS 独特功能的方便访问. 简单.PDO 旨在使您能够轻松使用数据库.API 不会强行介入您的代码,同时会清楚地表明

JDBC访问及操作SQLite数据库

SQLite 是一个开源的嵌入式关系数据库,其特点是高度便携.使用方便.结构紧凑.高效.可靠. 与其他数据库管理系统不同,SQLite 的安装和运行非常简单,在大多数情况下,只要确保SQLite的二进制文件存在即可开始创建.连接和使用数据库.  SQLite的下载页面:http://www.sqlite.org/download.html window操作系统下载:sqlite-dll-win32-x86-3081002.zip及sqlite-shell-win32-x86-3081002.zi