データベースPDOの概要

はじめにPHP、PHPの歴史、PHPのバックエンドエンジニアのキャリアの見通し、PHP技術的な方向、PHPのバックエンドシステムは、プロのエンジニアを導入しました。

PHPは、世界で最も広く使用されているWeb開発言語、ハイパーテキストプリプロセッサは、汎用性の高いオープンソースのスクリプト言語で、構文が主のために、広く使われている学習に資するC言語、Java、およびPerlの機能を、吸収されますWeb開発では、他のプログラミング言語に比べてそれを行うには、PHP動的ページ、PHPは、HTML文書に埋め込まれ、完全にCGIがHTMLマークアップがはるかに高い生成よりも、PHPもポストコンパイルを行うことができ、効率的な実行、実行を継続コードは、コンパイラは、暗号化および最適化されたコードの目的を達成するため高速なコードの実行を行うことができます。

PHPは、ラスマス・ラードフによって1994年に作成されたPerl言語で書かれただけの簡単なプログラムを開始した彼のサイトへの訪問者をカウントするために使用され、後にC言語で書き換え、データベースにアクセスすることができ、1995年に開始しました最初のバージョンをリリースし、個人のホームページのツールに名前を付け、その後、PHPのバージョン1.0をリリースしました。

1995年には、php2.0がリリース。1997年には、PHP3はPHP5.0がリリースされ、2004年にリリース。

PHPはより広く、web3.0の温暖化は、PHPは、優れたWeb開発言語、は、Linux、Apache、MySQLの金のポートフォリオで使用されています。

ウェブ技術のPHP言語のフロントエンド、Linuxオペレーティングシステム、MySQLのデータベース、さまざまなPHP開発フレームワーク、および大規模なデータ・キャッシングの最適化技術、システムのチューニングおよび負荷分散とバックエンドWeb技術、。

HTML、JavaScriptのエントリ、PHP言語の基礎、ソースコード管理、mysqlデータベース入門。

Linuxオペレーティングシステム、PHPのオブジェクト指向、高レベル言語の開発技術、一般的に使用されるPHP開発フレームワーク、PHPおよび公開APIインタフェースの開発、PHPのテストツール。

綿密な研究のhttpプロトコル、PHP高度な構成環境は、MySQLデータベースの最適化技術、静的およびキャッシング技術、Webサイトのセキュリティ技術。

PHPのソースコードフレームワークの詳細な分析、PHPのコア、NOSQLデータベース、クラスタリングと負荷分散技術の詳細な研究。

Linuxオペレーティングシステムの深さの調査、マルチレベルのキャッシング技術、大規模なデータ最適化技術、災害復旧技術、大規模なシステム設計方法論の枠組み。

PDOデータベース説明:

PDO導入、インストールと設定、PDOリンクデータベース、プレゼンテーションおよびPDOオブジェクトメソッド、オブジェクトメソッド、PDOのエラー処理、結合PDOパラメータ、PDOトランザクション、PDOの戦闘による前処理のPDOStatementに導入し、使用を使用しています。

PDOは、データベースアクセス抽象化層、データベースの様々なアクセスするための統一されたインタフェースです。

PDO特性、符号化の一貫性、柔軟性、性能、オブジェクト指向機能。

image.png

オープンPDO:

extension = php_pdo.dll
extension = php_pdo_mysql.dll

接続パラメータ形式、構成ファイルを介してデータベースに接続するURI接続の形態です。

<?php
// 通过参数形式连接数据库
try {
 $dsn = 'mysql:host=localhost; dbname=dashucoding'; $username=‘root’; $passwd='root'; $pdo=new PDO($dsn, $username, $passwd); var_dump($pdo); }catch(PDOException $e){ echo $e -> getMessage(); }

image.png

<?php
// 通过uri的形式连接数据库
try {
 $dsn='uri:file//文件路径\dsn.txt'; $username='root'; $passwd='root'; $pdo = new PDO($dsn, $username, $password); var_dump($pdo); }catch(PDOException $e){ echo $e->getMessage(); }
mysql:dbname=dashucoding; host=localhost

image.png

記録動作を挿入します

<?php
try{
$pdo = new PDO('mysql:host=localhost;dbname='dashucoding','root','root'); // exec对select没有作用 // exec()执行一条语句并返回其受影响的记录条数 $sql = <<<EOF CREATE TABLE IF NOT EXISTS user( id INT UNSIGNED AUT_INCREMENT key, username varchar(20) not null unique, password CHAR(32) not null, email varchar(30) not null ); EOF;  $res = $pdo -> exec($sql);  var_dump($res);  $sql='insert user(username,password,email) values ('dashu',"'.md5('dashu').'","[email protected]")')); }catch(PDOException $e){ echo $e -> getMessage(); }

エラーメッセージを表示するためのerrorCode()とのerrorInfo()メソッド

<?php
header('content-type:text/html; charset=utf-8');

try{
$pdo = new PDO('mysql:host=localhost; dbname=dashucoding', 'root', 'root'); $res = $pdo->exec($sql); var_dump($res); if($res === false){ echo $pdo -> errorCode(); echo '<br/>'; echo $pdo -> errorInfo(); print_r($errInfo); } }catch(PDOException $e){ echo $e->getMessage(); }

クエリ()メソッドは、クエリを実行します

<?php
header('content-type:text/html; charset=utf-8');
try{
 $pdo = new PDO('mysql:host=localhost; dbname=dashucoding', 'root', 'root'); $sql = 'select * from user where id = 3'; $stmt = $pdo -> query($sql); var_dump($stmt); foreach($stmt as $row){ } }catch(PDOException $e){ echo $e -> getMessage(); }

image.png

PDO、データベースの接続方法、PDOのSQL文で実行する方法を学び、PDO PDOのSQL文のエラーを取得するにはどのような方法、エラー処理メソッド、トランザクション処理、PDOストアドプロシージャの結果セットを取得します。

PDOは、PHPデータオブジェクトです。

PDOは、データベースアクセス抽象化層、データベースの様々なアクセスするためのインタフェースを統一することができます。

configureコマンドmysqlデータベースを使用するために、PDO、Linux環境をインストールします。

--with-pdo-mysql=/path/to/mysql/installation

PDOデータベースに接続します。

<?php
$dbms = 'mysql';
$dbName = 'db_database';
$user = 'root'; $pwd = 'root'; $host = 'localhost'; $dsn = "$dbms:host=$host; dbname=$dbName"; try{ $pdo = new PDO($dsn, $user, $pwd); echo "pdo连接mysql成功"; }catch(Exception $e){ echo $e -> getMessage()."<br>"; } ?>

DSN:データソース名
、ユーザ名:データベースのユーザー名に接続し
、データベースに接続するためのパスワード:パスワード
driver_options:データベースに接続するための他のオプション

<?php
header('Content-Type:text/html; charset=utf-8");
$dbms='mysql';
$dbName='db_database'; $user='root'; $pwd='root'; $host='localhost'; $dsn="$dbms:host=$host;dbname=$dbName"; try{  $pdo=new PDO($dsn, $uer, $pwd); echo "PDO连接Mysql成功"; }catch(Exception $e){ echo $e->getMessage()."<br>"; } ?>

DSNは、データソース、データベースに必要な接続情報です。

PDO SQL文を実行します。

exec()方法
exec 方法返回执行sql语句后受影响的行数
int PDO::exec(string statement)
参数statement要执行的sql语句

ユニバーサル挿入、削除および更新

<?php
$dbms = 'mysql';
$dbName='db_database';
$user='root'; $pwd='root'; $host='localhost'; $dsn = "$dbms:host=$host; dbname=$dbName"; $query="delete from tb_da where id=2"; // sql语句 try{ $pdo = new PDO($dsn, $user, $pwd); $affCount=$pdo -> exec($query); echo "删除条数".$affCount; }catch(Exception $e){ echo "".$e->getMessage()."<br>"; } ?>

query()メソッド

クエリ()メソッドが一般的に使用されるクエリを実行した後、結果セットを返します

PDOStatement PDO::query(string statement)
<table width="200" border="0" bgcolor="#FF3377"> <tr> <td></td> </tr> </table> <?php $dbms = 'mysql'; $dbName='db_database'; $user='root' $pwd='root'; $dsn="$dbms:host=$host; dbname=$dbName"; $query = "select * from tb_da"; try{ $pdo = new PDO($dsn, $user, $pwd); $result=$pdo->query($query); // 输出结果集中的数据 foreach($result as $row){ // 输出结果集中的数据 }catch(Exception $e){ echo $e->getMessage()."<br>"; } ?>

準備された文:()を準備し、()を実行する
クエリの準備を行うための準備()メソッドを、(実行にパラメータを結合するために、クエリ、bindParam()メソッドを実行するために()メソッドを実行する)方法

PDOStatement PDO::prepare(string statement [, array driver_options])
bool PDOStatement::execute([array input_parameters])

準備()とexecute()メソッド:

<?php
$dbms = 'mysql';
$host = 'localhost'; $dbName = 'db_da'; $user='root'; $pass='root'; $dsn="$dbms:host=$host;dbname=$dbName"; try{ $pdo=new PDO($dsn, $user, $pass); $query = "select * from tb_mysql"; $result = $pdo->prepare($query); $result->execute(); while($res = $result->fetch(PDO::FETCH_ASSOC)){ }catch(PDOException $e){ die($e->getMessage()."<br/>"); } ?>

結果セットを取得するPHPの方法

fetch()方法获取结果集中的下一行数据
fetchAll()方法获取结果集中的所有行
fetchColumn()方法获取结果集中下一行指定的列的值

fetch()方法:参数

mixed PDOStatement::fetch( fetch_style, cursor_orientation, int_cursor_offset)

PDO::FETCH_ASSOC关联数组形式
PDO::FETCH_NUM数字索引数组形式
PDO::FETCH_BOTH两者数组形式都有
PDO::FETCH_OBJ按照对象的形式
PDO::FETCH_BOUND以布尔值的形式返回结果
PDO::FETCH_LAZY 以关联数组,数字索引,和对象三种形式返回

cursor_orientation:PDOStatement对象的一个滚动游标
cursor_offset:游标的偏移量

<?php
$dbms = 'mysql';
$host='localhost';
$dbName='db_database'; $user='root'; $pass='root'; $dsn = "$dbms:host=$host;dbname=$dbName"; try{ $pdo = new PDO($dsn, $user, $pass); $query = "select * from tb_pdo_mysql"; $result = $pdo->prepare($query); $result->execute(); while($res=$result->fetch(PDO::FETCH_ASSOC)){ }catch(PDOException $e){ die( $e->getMessage()."<br/>"); } ?>
<?php
$dbms='mysql'; // 数据库类型,对于开发者来说,使用不同的数据库,只要该这个就行
$host='localhost'; $dbName='db_database'; $user = 'root'; $pass = 'root'; $dsn = "$dbms:host=$host; dbname=$dbName"; try{ $pdo = new PDO($dsn,$user,$pass); $query = "select * from tb_pdo_mysql"; $result=$pdo->prepare($query); $result->execute(); while($res=$result->fetch(PDO::FETCH_ASSOC){ }catch(PDOException $e){ die( $e -> getMessage() ); } ?>

fetchAll()方法获取结果集中的所有行

array PDOStatement::fetchAll();
参数fetch_style:控制结果集中数据的返回方式
参数column_index:字段的索引
返回的是包含结果集中所有数据的二维数组
<?php
$dbms = 'mysql';
$host = 'localhost';
$dbName = 'db_database'; $user = 'root'; $pass = 'root'; $dsn = "$dbmms:host=$host; dbname = $dbName"; try{ $pdo = new PDO($dsn, $user, $pass); $query = "select * from tb_pdo_mysql"; $result=$pdo -> prepare($query); $result->execute(); $res=$result->fetchAll(PDO::FETCH_ASSOC); for($i=0;$i<count($res);$i++){ ?> <tr> <td height="22" align="center" valign="middle"><?php echo $res[$i]['id'];?></td> <td align="center" valign="middle"><?php echo $res[$i]['pdo_type'];?</td> </tr> <?php } }catch(PDOException $e){ die("Error!:".$e->getMessage()."<br/>"); } ?>

fetchColumn()方法

获取结果集中下一行指定列的值:

string PDOStatement::fetchColumn()

参数column_number设置行中列到的索引值,该值从0开始,省略该参数将从第1列开始取值。

<?php
$dbms = 'mysql';
$host = 'localhost';
$dbName = 'db_database'; $user = 'root'; $pass = 'root'; $dsn = "$dbms:host=$host;dbname=$dbName"; try{ $pdo = new PDO($dsn, $user, $pass); $query = " select * from tb_pdo_mysql"; $result = $pdo -> prepare($query); // 准备查询语句 $result -> execute(); // 执行查询语句 ?> <tr> <td><?php echo $result->fetchColumn(0);?></td> <td><?php echo $result->fetchColumn(0);?></td> <td><?php echo $result->fetchColumn(0);?></td> <td><?php echo $result->fetchColumn(0);?></td> </tr> <?php }catch(PDOException $e) { die("Error!:".$e->getMessae()."<br/>"); } ?>

pdo中捕获sql语句中的错误

使用默认模式
PDO::ERRMODE_SILENT
pdo::errmode_silent

使用警告模式
PDO::ERROMODE_WARNING
pdo::erromode_warning

使用异常模式
PDO::ERRMODE_EXCEPTION
pdo::errmode_exception

// pdo连接数据库mysql,通过预处理prepare()和execute()方法执行insert添加操作
<?php
if($_POST['Submit']=="提交"&&$_POST['pdo']!=""){ $dbms = 'mysql';// 数据库类型 $host = 'localhost'; // 数据库主机名 $dbName = 'db_database'; // 使用的数据库 $user = 'root'; // 数据库的连接用户名 $pass = 'root'; // 对应的密码 $dsn = "$dbms:host=$host; dbname=$dbName"; $pdo = new PDO($dsn, $user, $pass); $query = "insert into tb_pdo_mysql(pdo_type, database_name,dates) values ("", $_POST['pdo'].", ".$_POST['databases'].",".$_POST['dates'].")"; $result = $pdo->prepare($query); $result -> execute(); $code = $result->errorCode(); if(empty($code)){ echo "数据添加成功!"' }else{ echo "数据添加错误:<br/>"; echo 'sql query:'.$query; echo '<pre>'; var dump($result->errorInfo()); echo '</pre>'; }} ?>
// 设置警告模式,通过prepare()和execute()方法读取数据库中数据
// setAttribute()方法设置为警告模式
<?php
$dbms = 'mysql'; // 数据库类型
$host = 'localhost'; // 数据库主机名 $dbName = 'db_database'; // 数据库连接用户名 $user = 'root'; $pass = 'root'; $dsn="$dbms:host=$host; dbname=$dbName"; try{ $pdo = new PDO($dsn, $user, $pass); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); // 设置为警告模式 $query = "select * from tb_pdo_mysqls"; // 定义sql语句 $result = $pdo -> prepare($query); // 准备查询语句 $result->execute(); // 执行查询语句,并返回结果集 while($res=$result->fetch(PDO::FETCH_ASSOC)){ ?> <tr> <td><?php echo $res['id'];?></td> <td><?php echo $res['date'];?></td> </tr> <?php } }catch(PDOException $e){ die("Error!:".$e->getMessage()."<br/>"); } ?>
// 异常模式
<?php
heder("Content-type: text/html; charset="utf-8"); // 设置文件编码格式
if($_GET['conn_id']!=""){
 $dbms = 'mysql';//数据库类型  $host = 'localhost';  $dbName='db_database';  $user='root';  $pass='root';  $dsn = "$dbms:host=$host; dbname=$dbName"; try {  $pdo = new PDO($dsn, $user, $pass);  $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  $query="delete from tb_pdo_mysqls where Id=:id";  $result = $pdo->prepare($query); // 预准备语句  $result = bindParam(':id', $_GET['conn_id']); // 绑定更新的数据  $result -> execute(); }catch(PDOException $e) { echo 'PDO Exception Caught.'; echo 'Error with the database:<br/>'; echo 'SQL Query:'.$query; echo '<pre>'; echo "Erro:".$e->getMessage()."<br/>"; echo "File:".$e->getCode()."<br/>"; echo "Line:".$e->getFile()."<br/>"; echo "Trace:".$e->getTranceAsString()."<br/>"; echo '</pre>'; }} ?>

pdo中错误处理:
errorCode()方法和errorInfo()方法

操作ハンドルは、データベースが発生した場合に、エラーコードを取得するためのerrorCode()メソッド。

int PDOStatement::errorCode(void)

errorCode()メソッドはSQLSTATEコードを返します。

<?php
$dbms='mysql'; // 数据库类型
$host='localhost'; // 数据库主机名 $dbName = 'db_database'; // 使用的数据库 $user = 'root'; // 数据库连接用户名 $pass = 'root' 对应的密码 $dsn = "dbms:host = $host; dbname = $dbName"; try{ $pdo = new PDO($dsn, $user, $pass); $query = "select * from tb_pdo_mysqls"; // 定义sql语句 $result = $pdo -> query($query); // 执行查询语句,并返回结果集 echo "errorCode为: ".$pdo->errorCode(); foreach($result as $items){ ?> <tr> <td><?php echo $items['id'];?></td> </tr> <?php } }catch(PDOException $e){ die("Error!:" . $e->getMessage()."<br/>"); } ?>

情報操作データベースハンドルを取得する際のエラーのためのerrorInfo()メソッドが発生します。

array PDOStatement::errorInfo(void)
<?php
$dbms = 'mysql';
$host = 'localhost';
$dbName = 'db_database'; $user = 'root'; $pass = 'root'; $dsn = "$dbms:host=$host; dbname=$dbName"; try{ $pdo = new PDO($dsn, $user, $pass); // 初始化一个pdo对象,创建数据库连接对象$pdo $query = "select * from tb_pdo_mysqls"; // 定义sql语句 $result = $pdo -> query($query); // 执行查询语句 print_r($pdo->errorInfo()); foreach($result as $items){ ?> <tr> <td><?php echo $items['id'];?></td> <td><?php echo $items['pdo_type'];?></td> </tr> <?php } }catch(PDOException $e){ die("Error!:".$e->getMessage()."<br/>"); } ?>

トランザクション内のPDO:

オープントランザクション:のbeginTransaction()メソッド
のbeginTransaction()メソッドは、トランザクションがコミットまたはロールバックされた後まで再開し、自動コミットモードを提出自動的に閉じます

トランザクションをコミットします()メソッドをコミット
トランザクション操作を完了する方法)(コミット提出し、そうでない場合はfalse、成功した場合trueを返します

ロールバックトランザクション:のロールバック()メソッドを
作成し、データベースにデータを追加する()メソッドを実行し、取引メカニズムは、データが正しくデータベースに追加することができることを確認

オープントランザクションのbeginTransaction()メソッド
$ _POSTにより[]の形で提出されたデータ取得方法
準備()を介して追加されたデータを、データベースに()メソッドを実行
コミット()メソッドによって、トランザクションを完了するために操作をコミット
トランザクションを実行するのロールバック()メソッドロールバック

<?php
if($_POST['Submit']=="提交" && $_POST['pdo']!=""){  $dbms = 'mysql'; //数据库类型  $host = 'localhost'; // 数据库主机名  $dbName = 'db_database''; // 数据库  $user='root';  $pass='root';  $dsn = "$dbms:host=$host; dbname=$dbName"; try{  $pdo=new PDO($dsn, $user, $pass);  $pdo -> beginTransaction(); // 开启事务  $query="insert into tb_pdo_mysql(pdo_type, database_name, dates) values ("", $_POST['pdo'].",".$_POST['databases'].",".$_POST['dates'].")";  $result = $pdo->prepare($query);  if($result->execute()){ echo "数据添加成功"; }else{ echo "数据添加失败"; }  $pdo->commit(); // 执行事务的提交操作 }catch(PDOException $e){ die("Error!:".$e->getMessage()."<br/>");  $pdo->rollBack(); } } ?>

PDOストアドプロシージャ

PDOストアドプロシージャを呼び出します。

drop procedure if exists pro_reg; delimiter // create procedure pro_reg(in nc varchar(80), in pwd varchar(80), in email varchar(80), in address varchar(50)) begin insert into ... end; // 

登録:ニックネーム、登録用パスワード、電子メール、ホームアドレス。

<title>用户注册</title>
<form name="form1" method="post" action="index.php" onsubmit="return chkinput(this)"> </form> <?php if($_POST['submit']!=""){ $dbms='mysql'; //数据库类型 $host='localhost'; //数据库主机名 $dbName='db_database'; //使用的数据库 $user='root'; //数据库连接用户名 $pass='root'; //对应的密码 $dsn="$dbms:host=$host;dbname=$dbName"; try { $pdo = new PDO($dsn, $user, $pass); //初始化一个PDO对象 $pdo->query("set names utf8"); //设置数据库编码格式 $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $nc=$_POST['nc']; $pwd=md5($_POST['pwd']); $email=$_POST['email']; $address=$_POST['address']; $query="call pro_reg('$nc','$pwd','$email','$address')";//call调用存储过程 $result=$pdo->prepare($query); if($result->execute()){ echo "数据添加成功!"; }else{ echo "数据添加失败!"; } } catch (PDOException $e) { echo 'PDO Exception Caught.'; echo 'Error with the database:<br/>'; echo 'SQL Query: '.$query; echo '<pre>'; echo "Error: " . $e->getMessage(). "<br/>"; echo "Code: " . $e->getCode(). "<br/>"; echo "File: " . $e->getFile(). "<br/>"; echo "Line: " . $e->getLine(). "<br/>"; echo "Trace: " . $e->getTraceAsString(). "<br/>"; echo '</pre>'; } } ?> <script language="javascript"> function chkinput(form){ if(form.nc.value==""){ alert("请输入用户昵称!"); form.nc.select(); return(false); } if(form.pwd.value==""){ alert("请输入注册密码!"); form.pwd.select(); return(false); } if(form.email.value==""){ alert("请输入E-mail地址!"); form.email.select(); return(false); } if(form.address.value==""){ alert("请输入家庭地址!"); form.address.select(); return(false); } return(true); } </script>
<?php 
    header("Content-Type:text/html;charset=utf-8");
    $dbms='mysql';
    $dbName='db_database'; $user='root'; $pwd='root'; $host='localhost'; $dsn="$dbms:host=$host;dbname=$dbName"; ?> <form action="" method="post"> <div> <span>PDO插入数据</span><br> 用户名:<input class="one" type="text" name="text" ><br> 密&nbsp;&nbsp;码:<input class="one"type="password" name="pwd"><br> <input class="two" type="submit" name="sub" value="确定"> <input class="two" type="reset" name="res" value="重置"> <?php if(isset($_POST[sub])){ if($_POST[text]==""&&$_POST[pwd]==""){ echo "文本框内容不能为空"; }else{ try { $pdo=new PDO($dsn,$user,$pwd); $sql="insert into tb_pdo values('','$_POST[text]','$_POST[pwd]',now())"; $result=$pdo->exec($sql); echo "插入数据成功,影响条数为".$result; } catch (Exception $e) { echo "ERROR!!".$e->getMessage()."<br>"; } } } ?> </div> </form> 
<form action=''method="post"> <?php } if(isset($_GET[id])){ $sql1="select * from tb_pdo where id='$_GET[id]'"; $resul=$pdo->query($sql1); foreach ($resul as $value){ ?> <tr> <td class="one"><input readonly type='text' name='id' value='<?php echo $value[id];?>'></td> <td class="one"><input type='text' name='user' value='<?php echo $value[1];?>'></td> <td class="one"><input type='password' name='pwd' value='<?php echo $value[2];?>'></td> <td class="one"><input type='text' name='date' value='<?php echo $value[3];?>'></td> <td class="one"><input class="two" type='submit' name='sub1' value='确定'></td> </tr> <?php } } ?> </form> <?php if($_POST[sub1]=="确定"){ $sql2="update tb_pdo set username='$_POST[user]',userpwd='$_POST[pwd]',date='$_POST[date]' where id='$_POST[id]'"; $resu=$pdo->exec($sql2); if($resu==1){ echo "<script>alert('更新数据成功');window.location.href='index.php'</script>"; } } } catch (Exception $e) { echo "ERROR!!!".$e->getMessage()."<br>"; } ?>

 

おすすめ

転載: www.cnblogs.com/daofaziran/p/11571876.html