欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

php pdo mysql 例子 有大用

宁皓网 pdo mysql 例子 
插入 
第一个例子 不使用 名字占位符
<?php
try{

   $db_handle = new PDO('mysql:host=localhost;dbname=php_course;port=8889;charset=utf-8','root','root');   //这里 charset=utf-8 应该不起作用

  $db_handle->exec("SET NAMES 'utf8';");//这一句起作用  为何加上这句才不是乱码?
   $statement = $db_handle->prepare(
'INSERT INTO posts(title,content) VALUES (?,?)'
   );
   $title = '阿甘正传';
   $content = '他是一个占据着成年人';
   $statement->bindParam(1,$title);
   $statement->bindParam(2,$content);
   $statement->execute();

     

}catch(PDOException $e){
   echo $e->getMessage();
}

 

?>
第二个例子 使用 名字占位符
<?php

 

try{
   $db_handle = new PDO('mysql:host=localhost;dbname=php_course;port=8889;charset=utf-8','root','root');
   $statement = $db_handle->prepare(
'INSERT INTO posts(title,content) VALUES (:title,:content)'
   );
   $title = '阿甘正传';
   $content = '他是一个占据着成年人';
   $statement->bindParam('title',$title);
   $statement->bindParam('content',$content);
   $statement->execute();

  

}catch(PDOException $e){
   echo $e->getMessage();
}
?>

 

第三个例子 使用 关联数组绑定占位符
<?php

 

try{
   $db_handle = new PDO('mysql:host=localhost;dbname=php_course;port=8889;charset=utf-8','root','root');
   $statement = $db_handle->prepare(
'INSERT INTO posts(title,content) VALUES (:title,:content)'
   );
   $data = [
'title'=>'阿甘正传',
'content'=>'他是一个占据着成年人'

 

   ];
   $statement->execute($data);

  

}catch(PDOException $e){
   echo $e->getMessage();
}
?>

   

查询

 

看fetch 返回来的结果的样式 fetch_style 的说明
第四个例子
<?php

 

try{
   $db_handle = new PDO('mysql:host=localhost;dbname=php_course;port=8889;charset=utf-8','root','root');
   $statement = $db_handle->prepare(
'SELECT * FROM posts'
   );

 

echo '<pre>';
   var_dump(
       $statement->fetch();  //取得下一条数据 首先返回第一行数据 再调一次返回第二行内容
       $statement->fetch(PDO::FETCH_NUM);  
       $statement->fetch(PDO::FETCH_ASSOC);  
       $statement->fetch(PDO::FETCH_OBJ);  
 )

  

}catch(PDOException $e){
   echo $e->getMessage();
}
?>
第五个例子
<?php

 

try{
   $db_handle = new PDO('mysql:host=localhost;dbname=php_course;port=8889;charset=utf-8','root','root');
   $statement = $db_handle->prepare(
'SELECT * FROM posts'
   );
   $statement->execute();
   //使用这个方法,可以给声明去设置一个统一的提取的样式。
   //这样所有用 $statement 的 fetch() 方法提供的内容,都会使用关联数组的样式。
   $statement->setFetchMode(PDO::FETCH_ASSOC);
   while ($row = $statement->fetch())
   {
     echo '《 '. $row['title']. ' 》'. $row['content'] . '<br>';
   }
echo '<pre>';
   var_dump(
       $statement->fetch();  //取得下一条数据 首先返回第一行数据 再调一次返回第二行内容
       //$statement->fetch(PDO::FETCH_NUM);  
       //$statement->fetch(PDO::FETCH_ASSOC);  
       //$statement->fetch(PDO::FETCH_OBJ);  
 )

  

}catch(PDOException $e){
   echo $e->getMessage();
}
?>


php7.0,不支持mysql_系列函数,支持mysqli和pdo,更推荐的是pdo!

将项目中的安装文件的mysql_系列函数,升级为pdo函数的过程中,看了看pdo的操作文档。

 

1.我们都知道,首先得链接数据库成功,使用mysql很简单:

mysql_connect('127.0.0.1:3306', 'root', 'root'),if判断返回值即可。

而pdo链接,正确返回一个pdo对象,错误则会抛出个pdo异常,得使用:

try{

$link = new PDO($dsn, $user, $password);

}catch(DPOException $e){

echo $e->getMessage();

}

2.针对pdo的dsn的问题,纠结了好久。。

先说下dsn的格式:

dsn前缀:例如:'mysql:'

host:'127.0.0.1'

port:'3306'// 默认可不写

dbname:‘test'// 数据库

unix_socket:mysql的socket文件(/tmp/mysql.sock),不可同host&port方式一起使用

charset:// 5.3.6以后新增,字符集,默认是utf-8

上面就是所有的参数格式,这里得强调下,查看手册,发现所有的例子,dsn中都包含了dbname这个参数,让我很纠结了半天,以为pdo的链接必须有dbname。对于初始应用的安装,我们需要的是创建一个新的数据库,开始并不存在。所以我就想了 "每个mysql安装后,都应该有个test数据库",所以,dsn中就是 "dbname=test",然后在连接成功后,创建好数据库,再使用 "use mydb" 切换为新创建的数据库,然后创建表!

------------------------------------------------------------------------------------------------------------

想法有点天真。。。有的用户可能直接删除了test数据库!第二天负责人说了下,它测试了下没有dbname也可以链接成功,我居然都不懂得去测测。。。。。对自己也是无语了。。。。。这才认真的去找了下手册,别人的评论,确实有个人说了:

所以,dbname是可选的!!

最后,再分析下dsn参数支持的3种不同的方式:

1.就是我们最常用的 "驱动调用方式",就是上面的

2.URI调用方式(一个uri定位的文件,文件中包含的就是dsn的字符串),可本地或远程文件。必须有 'uri:' 前缀

uri:file://url

3.别名方式,我们可在php.ini文件中定义,明确说明,不可在.htaccess 或 httpd.conf中调用

[pdo]

pdo.dsn.mydb="mysql:dbname=test;host=localhost"

new PDO('mydb', 'root', 'root);

来自 http://blog.csdn.net/beyond__devil/article/details/52593059



 

1.PDO简介 
PDO(PHP Data Object) 是PHP 5 中加入的东西,是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接和处理,什么 php_mysql.dll、php_pgsql.dll、php_mssql.dll、php_sqlite.dll等等。 
PHP6中也将默认使用PDO的方式连接,mysql扩展将被作为辅助 
2.PDO配置 
PHP.ini中,去掉"extension=php_pdo.dll"前面的";"号,若要连接数据库,还需要去掉与PDO相关的数据库扩展前面的";"号,然后重启Apache服务器即可。 
extension=php_pdo.dll 
extension=php_pdo_mysql.dll 
extension=php_pdo_pgsql.dll 
extension=php_pdo_sqlite.dll 
extension=php_pdo_mssql.dll 
extension=php_pdo_odbc.dll 
extension=php_pdo_firebird.dll 
...... 
3.PDO连接mysql数据库 
new PDO("mysql:host=localhost;dbname=db_demo","root",""); 
默认不是长连接,若要使用数据库长连接,需要在最后加如下参数: 
new PDO("mysql:host=localhost;dbname=db_demo","root","","array(PDO::ATTR_PERSISTENT => true) "); 
4.PDO常用方法及其应用 
PDO::query() 主要是用于有记录结果返回的操作,特别是SELECT操作 
PDO::exec() 主要是针对没有结果集合返回的操作,如INSERT、UPDATE等操作 
PDO::lastInsertId() 返回上次插入操作,主键列类型是自增的最后的自增ID 
PDOStatement::fetch() 是用来获取一条记录 
PDOStatement::fetchAll() 是获取所有记录集到一个中 
5.PDO操作MYSQL数据库实例 

复制代码代码如下:

<?php 
$pdo = new PDO("mysql:host=localhost;dbname=db_demo","root",""); 
if($pdo -> exec("insert into db_demo(name,content) values('title','content')")){ 
echo "插入成功!"; 
echo $pdo -> lastinsertid(); 

?> 


 

复制代码代码如下:

<?php 
$pdo = new PDO("mysql:host=localhost;dbname=db_demo","root",""); 
$rs = $pdo -> query("select * from test"); 
while($row = $rs -> fetch()){ 
print_r($row); 

?> 

 

 

如对本文有疑问,请提交到交流社区,广大热心网友会为你解答

普通分类: