直接上代码,后面解释.
//连接
$pdo = new PDO("mysql:host=数据库地址;dbname=数据库名称","数据库账号","数据库密码");
//查询query()里写相应的查询语句,比如:select * from user where username='$na'
$cx = $pdo->query("查询语句");
/*
查询语句应含在""内,其实质是一个字符串,所以可以先编好查询语句,再将变量至于query()里,如:
$sql="select * from user where username='aaa'";
$cx = $pdo->query($sql);
等价于
$cx = $pdo->query("select * from user where username='aaa'");
*/
//分解查询到的数据为数组,之后对数据的调用形式为$a["username"],其值为aaa
$a = $cx->fetch();
//带参数插入
$stmt = $mysqli->prepare("insert into `user`(`username`,`password`,`email`,`date`) values(:U,:P,:E,:D)");
$stmt->bindParam(':U',$_POST["un"]);
$stmt->bindParam(':P',$_POST["pw1"]);
$stmt->bindParam(':E',$_POST["email"]);
$stmt->bindParam(':D',date("Y-m-d H:i:s"));
if($stmt->execute())
{}
else
{}
//带参数修改
$sql="update `user` set `date`=:D,`orderid`=:O where `username`=:U";
$stmt = $mysqli->prepare($sql);
$stmt->bindParam(':D',date_format($date,"Y-m-d H:i:s"));
$stmt->bindParam(':O',$_GET["out_trade_no"]);
$stmt->bindParam(':U',$_COOKIE["un"]);
if($stmt->execute())
{}
else
{}
//断开
$pdo=null;
1、在执行过
$cx = $pdo->query($sql);
以后,如果不再操作数据库,而只是使用查询出的结果,则可以马上执行$pdo=null;
以释放$pdo
,也就是说,$a = $cx->fetch();
可以在$pdo=null;
之后执行.
2、在不使用$pdo
时,一定要释放,这是一个良好的编程习惯,不释放有什么后果?我不知道.
3、插入与更改都是带参数的,但形式有所不同.这是怎么回事?我只能把我的经历分享给大家.这两段语句在我的网页里都能成功执行,我先写的插入,又过了很长时间,才写的更改,当我写更改时,试图用插入的格式写,但是总是不对.后来改了形式,就通过了.$sql="update
userset
date=:D,
orderid=:O where
username=:U";
里的sql语句是我从我的数据库里复制的,再稍加改动,加入参数,就成了.我的经验是:最稳妥的办法就是从你的数据库里复制SQL语句并加以修改.因为我在网上查资料的时候,发现很多不同形式的sql语句,我就很迷惑,到底哪种适合我的数据库,其实答案很简单,就是你去操作你的数据库,数据库会对你相应的操作给出sql语句,用这个语句肯定是最稳妥的.
下面我附上操作数据库,得到sql语句的过程.我使用的是阿里云.登录数据库后如图1
在进行一些修改后,点击图1的“提交修改”.会出现如下对话框,图2
将这里的语句复制到原代码即可,再进行相应改动,即可实现带参数操作数据库.
下面是我原文章的内容,有点乱,但更全.
4、php+mysql的PDO用法
一开始我就用phpstudy里介绍的方法,虽然结果没问题,但是网页会告诉你“这过时了,建议用mysqli或PDO来连接”。这是什么意思,直接百度。mysqli是mysql+intelligent(智能)的意思,复制代码以后,正常使用。有看PDO,发现这是一种更通用的数据库连接方式,于是决定所有的数据库操作都用PDO实现,下面贴出代码及注释。
<?php
$mysqli = new PDO("mysql:host=zzzzzzzz;dbname=xxxxxxxx","cccccccc","password");
/*建立一个名为$mysqli的数据库连接对象(这里我用$mysqli作为变量名,与mysqli的方法无关,只是我懒,就是个名字,无所谓,也不会出现第二个数据库链接对象,不会混淆)
参数有三个: 1、"mysql:host=zzzzzzzz;dbname=xxxxxxxx"(指明了数据库类型、地址、数据库名)
(PDO方法的好处是,即使你更换了数据库类型,比如sqlserver,仍然可以用这个方法,只需要改上面的参数所
以说他是通用的数据库连接方式)
2、"cccccccc"(用户名)
3、"password"(密码)
三个参数都正确才能建立正确的数据库连接对象
*/
$cx = $mysqli->query("select * from notice");
/*从一个名为notice的表格中查询全部对象,结果赋值给$cx。$mysqli执行query(查询)("select * from notice")(查询语句指明查询的具体内容)
*/
foreach($cx as $b){
//将每行数据赋值给一个数组。实际上$cx是个二维数组,通过一个foreach循环将二维数组分解成一维数组,再进行操作。
echo '<font size="50">[<a href="notice_content.php?id='.$b["id"].'">'.$b["noticename"].'</a>]   ['.$b["year"].'-'.$b["month"].'-'.$b["day"].']<br /></font>';
/*echo就是服务器向浏览器输出html代码的语句,一对单引号中的内容是不变的,变量不要用单引号括起来,每一对单引号及变量之间用.连接。
虽然我要输出的是一个二维数组,但我并没有用表格。因为浏览器渲染表格更费劲,不如空格、换行省劲。而且,表格的标签多很多,所以我在追求速度的情况下就没用表格,但是如果追求美观的话,就需要用表格,一句话,以需求为导向。
*/
}
$mysqli=null;
/*数据库用过了,别忘了删掉连接对象。其实这个连接对象可以更早的删除,可以早到$cx= $mysqli->query("select * from notice");之后。因为那之后$mysqli就没有再用过,也就是查询结果已经出来了(存进了$cx),也不需要再查询了,就可以删掉连接对象了。这样解释希望有助于读者更深的理解PDO连接数据库的原理。
*/
?>
==========================================================
5、数据库插入操作
下面是一段往表格插入行的命令,这是带参
$stmt = $mysqli->prepare("insert `road`(`id`,`roadname`,`intro`) values(:ID,:RN,:IN)");
// 插入的工作要先做准备,这里要格外注意的是,SQL语句里的引号,不是引号‘,是1左边的按键`,不知道是阿里云服务器的事,还是MySQL就这么规定的,所以我前面说最好直接在服务器上$id=uniqid();
$rn=$_POST["rn"];
$in=$_POST["in"];
// id取随机数,rn取路名,in取介绍内容
$stmt->bindParam(':ID',$id);
$stmt->bindParam(':RN',$rn);
$stmt->bindParam(':IN',$in);
// 就理解为为参数赋值吧
if ($stmt->execute())
//执行数据库操作
{
//如果成功
echo '<META HTTP-EQUIV="REFRESH" content="0;URL=road_select.php">';
//跳转页面
$mysqli=null;
//删除连接
}
else
{
//如果不成功
echo '<font size="50">数据库中已有此记录,请<a href="road_input.php">继续</a></font>';
//说明数据库里有这条记录,继续下一个输入。
}
直接执行某句非查询不带可变参数的sql语句,可用$stmt->exec(“。。。。。。”)
数据库其他操作
<?php
$dbh = new PDO('mysql:host=localhost;dbname=access_control', 'root', '');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->exec('set names utf8');
/*添加*/
//$sql = "INSERT INTO `user` SET `login`=:login AND `password`=:password";
$sql = "INSERT INTO `user` (`login` ,`password`)VALUES (:login, :password)"; $stmt = $dbh->prepare($sql); $stmt->execute(array(':login'=>'kevin2',':password'=>''));
echo $dbh->lastinsertid();
/*修改*/
$sql = "UPDATE `user` SET `password`=:password WHERE `user_id`=:userId";
$stmt = $dbh->prepare($sql);
$stmt->execute(array(':userId'=>'7', ':password'=>'4607e782c4d86fd5364d7e4508bb10d9'));
echo $stmt->rowCount();
/*删除*/
$sql = "DELETE FROM `user` WHERE `login` LIKE 'kevin_'"; //kevin%
$stmt = $dbh->prepare($sql);
$stmt->execute();
echo $stmt->rowCount();
/*查询*/
$login = 'kevin%';
$sql = "SELECT * FROM `user` WHERE `login` LIKE :login";
$stmt = $dbh->prepare($sql);
$stmt->execute(array(':login'=>$login));
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
print_r($row);
}
print_r( $stmt->fetchAll(PDO::FETCH_ASSOC));
?>