一、了解PDO访问异构数据库的方法–PDO类实例化、PDO类query( )方法和exec( )方法。注意激活PDO :
php_pdo_mysql.dll
try {
$db=new PDO("mysql:host=localhost;dbname=pxscj;", "root", "");
//实例化PDO类(创建PDO对象)
//$db=new PDO("sqlsrv:Server=localhost;Database=pxscj;","root",""); //只需要改DSN(数据库源名)
}
catch (PDOException $e) {
//捕获异常--PDOException(Exception的简单重写)
echo "数据库连接失败:".$e->getMessage();
//getMessage()--PDOException类中定义的方法
}
$db->exec("set names utf8mb4");
//exec()--PDO类的方法(执行没有结果集的SQL语句)
$query="insert into kcb values('606','PHP程序设计',6,48,3)"; //SQL语句
if($affCount = $db->exec($query)) {
//执行SQL语句$query--返回值为受影响记录数
echo "插入成功,受影响条数为:".$affCount."
";
}
$query="select * from kcb";
//SQL语句
foreach($db->query($query) as $row) {
//执行SQL语句$query--执行有结果集的SQL语句
echo "课程号:".$row[0]."
";
//返回的是一个PDOStatement类(型)的对象
echo "课程名:".$row[1]."
";
//还可以用PDOStatement类的方法fetch()行读
echo "开课日期:".$row[2]."
";
echo "学时:".$row[3]."
";
}
?>
二、PDO事务处理
try {
$db=new PDO("mysql:host=localhost;dbname=pxscj","root","");
//实例化PDO类(创建PDO对象)
}
catch (PDOException $e) {
//捕获异常--PDOException(Exception的简单重写)
echo "数据库连接失败:".$e->getMessage();
//getMessage()--PDOException类中定义的方法
}
try {
$db->exec("set names utf8mb4");
//exec()--PDO类的方法(执行没有结果集的SQL语句)
$db->beginTransaction(); //***事务开始***
$affrows=$db->exec("insert into kcb values('506','UML系统分析',5,48,3)");
if(!$affrows)
throw new PDOException("插入失败1");
$affrows=$db->exec("insert into kcb values('606','PHP程序设计',6,32,2)");
if(!$affrows)
throw new PDOException("插入失败2");
echo "插入成功!";
$db->commit(); //***事务结束***--如果全部成功则提交
}
catch (PDOException $e) {
//捕获异常--PDOException(Exception的简单重写)
echo $e->getMessage();
$db->rollback(); //回滚(要么成功要么失败)
}
?>
现在表中有这些内容,现在把'506','UML系统分析',5,48,3
这条记录删掉。
delete from kcb where 课程号=506;
select * from kcb;
果然,记录
'506','UML系统分析',5,48,3
虽然插入成功了, 但是由于第二条记录'606','PHP程序设计',6,32,2
插入失败,导致整个事务并没有全部成功,只要有失败的,事务就不会提交,并且执行了事务回滚,使记录'506','UML系统分析',5,48,3
也没有插入成功。
三、PDOStatement类的方法fetch( )的应用
try {
$db=new PDO("mysql:host=localhost;dbname=pxscj","root","");
//实例化PDO类(创建PDO对象)
//$db=new PDO("sqlsrv:Server=localhost;Database=pxscj;","root","111"); //只需要改DSN(数据库源名)
}
catch (PDOException $e) {
//捕获异常--PDOException(Exception的简单重写)
echo "数据库连接失败:".$e->getMessage();
//getMessage()--PDOException类中定义的方法
}
$db->exec("set names utf8mb4");
//exec()--PDO类的方法(执行没有结果集的SQL语句)
$sql="select * from XSB where 性别=0"; //SQL语句
$result=$db->query($sql);
//执行SQL语句$sql-返回一个PDOStatement类(型)对象
echo "";
//是一个结果集
echo "学号 姓名 总学分 ";
while($row=$result->fetch(PDO::FETCH_NUM))
//fetch()是PDOStatement类的方法(从结果集行读)
{
//返回的是一个键名为数字(PDO::FETCH_NUM)数组
list($XH, $XM, $XB, $CSSJ, $ZY, $ZXF, $BZ)=$row;
//list()将数组中的单元值赋值给变量
echo "$XH $XM $ZXF ";
}
echo "
";
?>
四、预定义语句的应用
try {
$db=new PDO("mysql:host=localhost;dbname=pxscj","root","");
//实例化PDO类(创建PDO对象)
}
catch (PDOException $e) {
//捕获异常--PDOException(Exception的简单重写)
echo "数据库连接失败:".$e->getMessage();
//getMessage()--PDOException类中定义的方法
}
$in_sql="insert into userinfo(username,password,sex,age,email) values(?,?,?,?,?)"; //SQL语句$in_sql
$in_result=$db->prepare($in_sql);
//预处理SQL语句$in_sql
$userid="php3"; $pwd1="111111"; $sex=0; $age=36;
$email="[email protected]";
$in_result->bindParam(1, $userid);
//PDOStatement的bindParam()的作用是绑定参数给execute( )
$in_result->bindParam(2, $pwd1);
//SQL语句使用问号参数时--bindParam()第一个参数是问号索引偏移(第几个)
$in_result->bindParam(3, $sex);
//bindParam()第二个参数是赋值给SQL语句参数(问号)的变量
$in_result->bindParam(4, $age);
//可以使用变量参数进行定制
$in_result->bindParam(5, $email);
$in_result->execute();
//执行经过预处理的SQL语句$in_result
if($in_result->rowCount()==0)
//用PDOStatement的rowCount()返回结果集行的总数
echo "";
else
echo "";
?>
五、制作一个登录系统,实现用户注册、用户登录、用户注销、修改密码等功能
<html>
<head>
<title>用户登录页面</title>
</head>
<body>
<form action="" method="post">
<div align="center">
<font size="5" color="blue">用户登录</font>
</div>
<table align="center">
<tr>
<td>用户名:</td>
<td><input type="text" name="userid"></td>
</tr>
<tr>
<td>密码: </td>
<td><input type="password" name="pwd" size="21"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="Submit" value="登录">
<input type="reset" name="Submit2" value="注册" onclick="window.location='SY9_5_regist.php'"></td>
</tr>
</table>
</form>
</body>
</html>
//修改 output_buffering = On 重启Apache
include "SY9_5_fun.php";
//SY9_5_fun.php(用于连接数据库)
if(isset($_POST['Submit']))
{
$userid=$_POST['userid']; //用户名
$pwd=$_POST['pwd']; //密码
$sql="select * from userinfo where username='$userid'"; //SQL语句
$result=$db->query($sql); //执行$sql--执行有结果集的SQL语句
if(list($username,$password,$sex,$age,$email)=$result->fetch(PDO::FETCH_NUM))
//用fetch()方法从结果集行读
{
if($password==$pwd) //判断密码是否正确
{
session_start(); //开启SESSION
$_SESSION['userid']=$username; //注册SESSION
header("location:SY9_5_main.php");
//跳转到主页
}
else
echo "";
}
else
echo "";
}
?>
<html>
<head>
<title>用户注册页面</title>
</head>
<body>
<form action="" method="post">
<div align="center">
<font size="5" color="blue">新用户注册</font>
</div>
<table width="340" align="center" border="0">
<tr>
<td width="80" align="right">用户名:</td>
<td><input type="text" name="userid"></td>
<td>
<font color="red">*1-20个字符</font>
</td>
</tr>
<tr>
<td align="right">密码:</td>
<td><input type="password" name="pwd1" size="21"></td>
<td>
<font color="red">*6-20个字符</font>
</td>
</tr>
<tr>
<td align="right">确认密码:</td>
<td><input type="password" name="pwd2" size="21"></td>
<td> </td>
</tr>
<tr>
<td align="right">性别:</td>
<td><input type="radio" name="sex" value="1">男<input type="radio" name="sex" value="0">
女</td>
<td> </td>
</tr>
<tr>
<td align="right">年龄:</td>
<td><input type="text" name="age"></td>
<td> </td>
</tr>
<tr>
<td align="right">email:</td>
<td><input type="text" name="email"></td>
<td> </td>
</tr>
<tr>
<td colspan="3" align="center"><input type="submit" name="Submit" value="提交">
<input type="reset" name="Submit2" value="重置"></td>
</tr>
</table>
</form>
</body>
</html>
if(isset($_POST['Submit']))
{
$userid=$_POST['userid'];
$pwd1=$_POST['pwd1'];
$pwd2=$_POST['pwd2'];
$sex=$_POST['sex'];
$age=$_POST['age'];
$email=$_POST['email'];
$checkid=preg_match('/^\w{1,20}$/',$userid);
//使用正则表达式检查用户名
$checkpwd1=preg_match('/^\w{6,20}$/',$pwd1);
$checkemail=preg_match('/^[a-zA-Z0-9_\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/',$email);
if(!$checkid)
echo "";
elseif(!$checkpwd1)
echo "";
elseif(!$sex)
echo "";
elseif($age&&(!is_numeric($age)))
echo "";
elseif($email&&(!$checkemail))
echo "";
elseif($pwd1!=$pwd2)
echo "";
else
{
include "SY9_5_fun.php";
//连接数据库
$s_sql="select * from userinfo where username='$userid'";
//SQL语句
$s_result=$db->query($s_sql);
//query()--PDO类的方法(执行有结果集的SQL语句)
if($s_result->rowCount()!=0)
//判断用户名是否已存在
echo "";
else {
$in_sql="insert into userinfo(username,password,sex,age,email) values(?,?,?,?,?)"; //SQL语句$in_sql
$in_result=$db->prepare($in_sql);
//预处理SQL语句$in_sql
$in_result->bindParam(1, $userid);
//PDOStatement的bindParam()的作用是绑定参数给execute( )
$in_result->bindParam(2, $pwd1);
//SQL语句使用问号参数时--bindParam()第一个参数是问号索引偏移(第几个)
$in_result->bindParam(3, $sex);
//bindParam()第二个参数是赋值给SQL语句参数(问号)的变量
$in_result->bindParam(4, $age);
$in_result->bindParam(5, $email);
$in_result->execute();
//执行经过预处理的SQL语句$in_result
if($in_result->rowCount()==0)
echo "";
else {
//注册成功后跳转到登录页面
echo "";
}
}
}
}
?>
session_start(); //开启SESSION
$userid=@$_SESSION['userid']; //取得SESSION值
if($userid) {
//判断$userid是否为空
echo "欢迎用户".$userid."登录!
";
echo "查看个人信息 ";
echo "修改密码 ";
echo "注销账户 ";
echo "退出
";
}
else
echo "对不起,您没有权限访问本页面";
?>
include "SY9_5_main.php"; //包含主页面
$username=$_SESSION["userid"]; //取得SESSION值
if($username)
{
include "SY9_5_fun.php"; //连接数据库
$select_sql="select * from userinfo where username='$username'";
//SQL语句
$select_result=$db->query($select_sql);
//执行SQL语句
while(list($username,$password,$sex,$age,$email)=$select_result->fetch(PDO::FETCH_NUM))
//行读结果集
{
echo "用户名:".$username."
";
echo "性别:";
if($sex==1)
echo "男
";
else
echo "女
";
echo "年龄:".$age."
";
echo "email:".$email; //输出email
}
}
?>
session_start();
$username=@$_SESSION['userid']; //取得SESSION值
if($username){
?>
<form action="" method="post">
<div align="center">
<font size="5" color="blue">密码修改</font>
</div>
<table align="center">
<tr>
<td>原密码:</td>
<td><input type="password" name="oldpwd"></td>
</tr>
<tr>
<td>新密码:</td>
<td><input type="password" name="newpwd"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="Submit" value="修改">
<input type="reset" name="Submit" value="重置"></td>
</tr>
</table>
</form>
}
else echo "您没有权限访问本页面";
if(isset($_POST['Submit'])) {
include "SY9_5_fun.php"; //连接数据库
$oldpwd=$_POST['oldpwd']; //原密码
$newpwd=$_POST['newpwd']; //新密码
$s_sql="select * from userinfo where username='$username'";
//SQL语句
$s_result=$db->query($s_sql);
//执行SQL语句
list($username,$password,$sex,$age,$email)=$s_result->fetch(PDO::FETCH_NUM);
if($oldpwd != $password) //判断原密码是否正确
echo "";
else {
$checkpwd=preg_match('/^\w{6,20}$/',$newpwd);
if(!$checkpwd)
echo "";
else {
$update_sql="update userinfo set password='$newpwd' where username='$username'"; //SQL语句
$affected=$db->exec($update_sql);
//执行sql语句$update_sql
if($affected) //如果受影响记录数不为0
echo"";
else
echo "";
}
}
}
?>
include "SY9_5_fun.php"; //连接数据库
session_start();
$username=@$_SESSION['userid'];
$delete_sql="delete from userinfo where username = '$username'";
//注销自己的SQL语句
$affected=$db->exec($delete_sql);
//执行没有返回的sql语句$delete_sql
if($affected) //如果受影响记录数不为0
echo "";
else
echo "";
?>
try {
$db=new PDO("mysql:host=localhost;dbname=PXSCJ","root","");
//实例化PDO类(创建PDO对象)
}
catch (PDOException $e) {
//捕获异常--PDOException(Exception的简单重写)
echo "数据库连接失败:".$e->getMessage();
//getMessage()--PDOException类中定义的方法
}
?>
创作不易,喜欢的话加个关注点个赞,蟹蟹蟹蟹