㈠ php登錄頁面完整代碼連接資料庫
創建conn.php,連接資料庫。
$dns = 'mysql:host=127.0.0.1;dbname=test';
$username = 'root';
$password = 'root';
// 1.連接資料庫,創建PDO對象
$pdo = new PDO($dns,$username,$password);
創建login.html,登陸頁面。
用戶名
密 碼
創建login.php,驗證賬號密碼。
header("Content-Type: text/html; charset=utf8");
if(!isset($_POST["submit"])){
exit("錯誤執行");
}//檢測是否有submit操作
include('conn.php');//鏈接資料庫
$name = $_POST['name'];//post獲得用戶名表單值
$pwd = sha1($_POST['password']);//post獲得用戶密碼單值
if ($name && $pwd){//如果用戶名和密碼都不為空
$sql = "select * from user where username = '$name' and password='$pwd'";//檢測資料庫是否有對應的username和password的sql
$stmt = $pdo->prepare($sql);
$stmt->execute();
if($stmt->fetch(PDO::FETCH_BOUND)){//0 false 1 true
header("refresh:0;url=welcome.html");//如果成功跳轉至welcome.html頁面
exit;
}else{
echo "用戶名或密碼錯誤";
echo "
setTimeout(function(){window.location.href='login.html';},1000);
";//如果錯誤使用js 1秒後跳轉到登錄頁面重試;
}
}else{//如果用戶名或密碼有空
echo "表單填寫不完整";
echo "
setTimeout(function(){window.location.href='login.html';},1000);
";
//如果錯誤使用js 1秒後跳轉到登錄頁面重試;
}
$pdo = null;
創建signup.html,注冊頁面
用戶名:
密 碼:
創建signup.php
header("Content-Type: text/html; charset=utf8");
if(!isset($_POST['submit'])){
exit("錯誤執行");
}//判斷是否有submit操作
$name=$_POST['name'];//post獲取表單里的name
$pwd = sha1($_POST['password']);//post獲取表單里的password
include('conn.php');//鏈接資料庫
$sql="insert into user(id,username,password) values (null,'$name','$pwd')";//向資料庫插入表單傳來的值的sql
$stmt = $pdo->prepare($sql);
$stmt->execute();
$stmt->fetch(PDO::FETCH_BOUND);
if (!$stmt){
die('Error: ' . $stmt->getMessage());//如果sql執行失敗輸出錯誤
}else{
echo "注冊成功";//成功輸出注冊成功
}
$pdo = null;//關閉資料庫
㈡ php 如何關閉資料庫連接
①如果用的是函數,比如連接MySQL,$conn=mysql_connect($db_host,$db_username,$db_password)為連接MySQL資料庫的資源,關閉此連接用mysql_close($conn)。
②如果用的是PDO,如&pdo=new PDO()為PDO連接,關閉連接將其設為null即可,即&pdo=null。
希望能幫上你。
㈢ PHP PDO中fetch的問題
query得到$rs後
$rs->setFetchMode(PDO::FETCH_ASSOC); //設置關聯模式
然後再$rs->fetchAll
即可得到欄位->值的關聯形式
㈣ 如何使用PDO查詢Mysql來避免SQL注入風險
我把問題和贊同最多的答題翻譯了下來。提問:如果用戶的輸入能直接插入到SQL語句中,那麼這個應用就易收到SQL注入的攻擊,舉個例子:$unsafe_variable = $_POST['user_input']; mysqli_query("INSERT INTO table (column) VALUES ('" . $unsafe_variable . "')");用戶可以輸入諸如 : value'); DROP TABLE table;-- ,SQL語句就變成這樣了:INSERT INTO table (column) VALUES('value'); DROP TABLE table;--')(譯者註:這樣做的結果就是把table表給刪掉了) 我們可以做什麼去阻止這種情況呢?回答:使用prepared statements(預處理語句)和參數化的查詢。這些SQL語句被發送到資料庫伺服器,它的參數全都會被單獨解析。使用這種方式,攻擊者想注入惡意的SQL是不可能的。要實現這個主要有兩種方式:1. 使用 PDO:$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name'); $stmt->execute(array(':name' => $name)); foreach ($stmt as $row) { // do something with $row }2. 使用 Mysqli:$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?'); $stmt->bind_param('s', $name); $stmt->execute(); $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { // do something with $row }PDO需要注意的是使用PDO去訪問MySQL資料庫時,真正的prepared statements默認情況下是不使用的。為了解決這個問題,你需要禁用模擬的prepared statements。下面是使用PDO創建一個連接的例子:$dbConnection = new PDO('mysql:dbname=dbtest;host=127.0.0.1;charset=utf8', 'user', 'pass'); $dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);上面的例子中,錯誤報告模式並不是強制和必須的,但建議你還是添加它。通過這種方式,腳本在出問題的時候不會被一個致命錯誤終止,而是拋出PDO Exceptions,這就給了開發者機會去捕獲這個錯誤。然而第一行的 setAttribute() 是強制性的,它使得PDO禁用模擬的prepared statements並使用真正的prepared statements。這可以確保這些語句和值在被發送到MySQL伺服器之前不會被PHP解析(這使得攻擊者沒有注入惡意SQL的機會)。盡管你可以使用可選的構造函數參數去設置 charset ,但重點需要注意的是小於5.3.6的PHP版本,DSN(Data Source Name)是默認忽略 charset 參數的。說明當你傳一個SQL語句做預處理時會發生什麼?它被資料庫伺服器解析和編譯了。通過指定參數(通過之前例子中的 ? 或者像 :name 這樣的命名式參數)你告訴資料庫引擎你是想過濾它。接著當你調用 execute() 函數時,prepared statements會和你剛才指定的參數的值結合。在此重要的是,參數的值是和編譯過的語句結合,而非一個SQL字元串。SQL注入就是當創建被發送到資料庫的SQL語句時,通過欺騙的手段讓腳本去引入惡意的字元串。因此當你使用單獨的參數發送真實正確的SQL時,你就限制了被某些不是你真實意圖的事情而搞掛掉的風險。使用prepared statements 傳遞的任何參數都會被當做字元串對待(不過資料庫引擎可能會做一些優化,這些參數最終也可能變成numbers)(譯者註:意思就是把參數當做一個字元串而不會去做額外的行為)。比如在上面的例子中,如果 $name 變數的值是 'Sarah'; DELETE * FROM employees ,產生的結果是會去搜索"'Sarah'; DELETE * FROM employees"這一整個字元串,最終的結果你也就不會面對的是一張空表了。使用prepared statements的另一個好處是,如果你在同一session中再次執行相同的語句,也就不會被再次解析和編譯,這樣你就獲得一些速度上的提升。
㈤ PHP實現的pdo連接資料庫並插入數據功能簡單示例
本文實例講述了PHP實現的pdo連接資料庫並插入數據功能。分享給大家供大家參考,具體如下:
創建配置文件
pdo_config.php
<?php
$db_Type
=
"mysql";//資料庫類型
$host
=
"localhost";//主機名
$dbName
=
"test";//資料庫名
$userName
=
"root";//用戶名
$password
=
"root";//密碼
$dsn
=
"{$db_Type}:host={$host};dbname={$dbName}";
?>
pdo插入資料庫
pdo_insert.php
<?php
header('Content-type:text/html;
charset=utf-8');
require
'pdo_config.php';
try{
$pdo
=
new
PDO
($dsn,$userName,$password);//創建一個連接對象
$pdo->exec('set
names
utf8');//設置編碼
$sql
=
"INSERT
student
(name,email)
VALUES
('李四','[email protected]')";
$pdo->exec($sql);
}catch
(PDOException
$e){
die('操作失敗'.$e->getMessage());
}
//關閉連接
$pdo
=
null;
?>
更多關於PHP相關內容感興趣的讀者可查看本站專題:《PHP基於pdo操作資料庫技巧總結》、《php+mysqli資料庫程序設計技巧總結》、《php面向對象程序設計入門教程》、《php字元串(string)用法總結》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧匯總》
希望本文所述對大家PHP程序設計有所幫助。
您可能感興趣的文章:關於php連接mssql:pdo
odbc
sql
serverPHP5中使用PDO連接資料庫的方法PHP中PDO連接資料庫中各種DNS設置方法小結ThinkPHP框架基於PDO方式連接資料庫操作示例PHP使用ODBC連接資料庫的方法tp5(thinkPHP5)框架連接資料庫的方法示例PHP7使用ODBC連接SQL
Server2008
R2資料庫示例【基於thinkPHP5.1框架】tp5(thinkPHP5)操作mongoDB資料庫的方法thinkPHP5實現資料庫添加內容的方法tp5(thinkPHP5)框架資料庫Db增刪改查常見操作總結PHP利用pdo_odbc實現連接資料庫示例【基於ThinkPHP5.1搭建的項目】
㈥ 我PHP用PDO可以操作MYSQL資料庫 那我為什麼還要去弄框架可以操作資料庫我還有封裝的必要嗎舉個例子
PDO配置。打開php.ini配置文件,找到下圖所示的配置信息,去掉要啟用的PDO前面的「#」號即可。另外一種方式是直接在啟動的wampserver中找到php擴展中的php_pdo_db.lib選項,重啟wampserver伺服器即可。如何利用PDO連接資料庫。利用下面這條簡單的語句即可連接資料庫$pdo=newPDO("mysql:host=localhost;dbname=php100","root",「");其中具體參數介紹如下圖所示:PDO中常用的函數及其解釋如下。PDO::query()主要是用於有記錄結果返回的操作,特別是SELECT操作PDO::exec()主要是針對沒有結果集合返回的操作,如INSERT、UPDATE等操作PDO::lastInsertId()返回上次插入操作,主鍵列類型是自增的最後的自增IDPDOStatement::fetch()是用來獲取一條記錄PDOStatement::fetchAll()是獲取所有記錄集到一個中下面通過一個簡單的php代碼示例來具體介紹如何使用PDO進行資料庫操作。exec("insertintouser_list(uid,m_id,username,password)values(null,'3','testpdo','testpdo')");//使用查詢語句$sr=$pdo->query("select*fromuser_list");//將查詢的結果循環輸出顯示while($row=$sr->fetch()){print_r($row);}?>
㈦ cpu pdo是什麼意思
意思如下:
中央處理器(central processing unit,簡稱CPU)作為計算機系統的運算和控制核心,是信息處理、程序運行的最終執行單元。CPU自產生以來,在邏輯結構、運行效率以及功能外延上取得了巨大發展。
PDO(PHP Data Objects)是一種在PHP里連接資料庫的使用介面。PDO與mysqli曾經被建議用來取代原本PHP在用的mysql相關函數,基於資料庫使用的安全性,因為後者欠缺對於SQL注入的防護。PHP 數據對象(PDO) 擴展為PHP訪問資料庫定義了一個輕量級的一致介面。實現 PDO 介面的每個資料庫驅動可以公開具體資料庫的特性作為標准擴展功能。
㈧ php中pdo連接資料庫操作完成後如何關閉資料庫啊,若不是持久連接,需要每次都關閉嗎
連接設為null即可。
㈨ 為什麼 PHP 應該使用 PDO 方式訪問資料庫
很多程序員都學習過如何使用 MySQL 或 MySQLi 擴展訪問資料庫。在 PHP 5.1 中,有一個更好的方法。PHP Data Objects(PDO) 提供了很多預處理語句的方法,且使用對象將使你的工作更有成效!
PDO 介紹
「PDO – PHP Data Objects – 是一個對多種資料庫提供統一操作方法的資料庫訪問層。」
它並不具備資料庫特有的語法,但它將使切換資料庫和平台更加容易,多數情況下,只需要簡單修改鏈接字元串。
這並非一篇完整教導如何使用SQL的教程。它重要為那些現今仍在使用 mysql 或 mysqli 擴展的人,幫助他們躍至更具可移植性和強力的 PDO。
資料庫支持
此擴展可以使用 PDO 驅動編寫過的所有資料庫。在本文書寫時,下面的資料庫支持已經實現:
PDO_DBLIB ( FreeTDS / Microsoft SQL Server / Sybase )
PDO_FIREBIRD ( Firebird/Interbase 6 )
PDO_IBM ( IBM DB2 )
PDO_INFORMIX ( IBM Informix Dynamic Server )
PDO_MYSQL ( MySQL 3.x/4.x/5.x )
PDO_OCI ( Oracle Call Interface )
PDO_ODBC ( ODBC v3 (IBM DB2, unixODBC and win32 ODBC) )
PDO_PGSQL ( PostgreSQL )
PDO_SQLITE ( SQLite 3 and SQLite 2 )
PDO_4D ( 4D )
你的系統不會也不必支持所有上面的驅動;下面是一個快速檢查所支持資料庫的方法:
1 print_r(PDO::getAvailableDrivers());
連接
不同資料庫的連接方法可能稍有不同,下面是一些較為流行的資料庫連接方法。你將注意到,雖然資料庫類型不同,前三種資料庫的連接方式是相同的——而 SQLite 使用自己的語法。
Connection String
01 try {
02 # MS SQL Server andSybase with PDO_DBLIB
03 $DBH = newPDO("mssql:host=$host;dbname=$dbname, $user, $pass");
04 $DBH = newPDO("sybase:host=$host;dbname=$dbname, $user, $pass");
05
06 # MySQL with PDO_MYSQL
07 $DBH = newPDO("mysql:host=$host;dbname=$dbname", $user, $pass);
08
09 # SQLite Database
10 $DBH = newPDO("sqlite:my/database/path/database.db");
11 }
12 catch(PDOException $e) {
13 echo$e->getMessage();
14 }
注意 try/catch 塊——你應該總是使用 try/catch 包裝你的 PDO 操作,並使用異常機制——這里只是簡單的示例。通常,你只需要一個連接——有很多可以教你語法的列表。 $DBH 代表「資料庫句柄」,這將貫穿全文。
通過將句柄設置為 NULL,你可以關閉任一連接。
1 # close the connection
2 $DBH = null;
你可以在PHP.net找到更多資料庫特定選項和/或其它資料庫連接字元串的信息。
異常與 PDO
PDO 可以使用異常處理錯誤,這意味著你的所有 PDO 操作都應當包裝在一個 try/catch 塊中。你可以通過設定錯誤模式屬性強制 PDO 在新建的句柄中使用三種錯誤模式中的某一個。下面是語法:
1 $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT );
2 $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
3 $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
無論你設定哪個錯誤模式,一個錯誤的連接總會產生一個異常,因此創建連接應該總是包裝在 try/catch 塊中。
PDO::ERRMODE_SILENT
這是默認的錯誤模式。如果你使用這個模式,你將得使用同 mysql 或 mysqli 擴展一樣的方法差錯。其它兩種模式更適合 DRY 編程。
PDO::ERRMODE_WARNING
此方法將會發出一個標准PHP警告,並允許程序繼續運行。這對調試很有幫助。
PDO::ERRMODE_EXCEPTION
這是多數情況下你所希望的方式。它生成異常,允許你更容易的處理錯誤,隱藏可能導致它人了解你系統的信息。下面是一個充分利用異常的示例:
01 # connect to the database
02 try {
03 $DBH = newPDO("mysql:host=$host;dbname=$dbname", $user, $pass);
04 $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
05
06 # UH-OH! Typed DELECT instead of SELECT!
07 $DBH->prepare('DELECT name FROM people');
08 }
09 catch(PDOException $e) {
10 echo"I'm sorry, Dave. I'm afraid I can't do that.";
11 file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
12 }
在 select 語句中有一個故意留下的錯誤;這將導致一個異常。異常錯誤細節保存至一個 log 文件,並生成一段友好的(或不怎麼友好的)信息於用戶。
插入和更新
插入新數據,更新已存數據是一種非常常見的資料庫操作。使用 PDO,這通常需要兩個步驟。本節中所述的所有內容對更新和插入都有效。
這里有一個最基本的插入示例:
1 # STH means "Statement Handle"
2 $STH = $DBH->prepare("INSERT INTO folks ( first_name ) values ( 'Cathy' )");
3 $STH->execute();
你也可以使用 exec() 完成相同的操作,這將減少調用。多數情況下,你會使用調用多的方法,以充分利用語句預處理的優勢。即使你只用它一次,使用語句預處理,幫助你保護你的 SQL 免於注入攻擊。
預處理語句
使用語句預處理將幫助你免於SQL注入攻擊。
一條預處理語句是一條預編譯的 SQL 語句,它可以使用多次,每次只需將數據傳至伺服器。其額外優勢在於可以對使用佔位符的數據進行安全處理,防止SQL注入攻擊。
你通過在 SQL 語句中使用佔位符的方法使用預處理語句。下面是三個例子:一個沒有佔位符,一個使用無名佔位符,一個使用命名佔位符。
1 # no placeholders - ripe for SQL Injection!
2 $STH = $DBH->("INSERT INTO folks (name, addr, city) values ($name, $addr, $city)");
3
4 # unnamed placeholders
5 $STH = $DBH->("INSERT INTO folks (name, addr, city) values (?, ?, ?);
6
7 # named placeholders
8 $STH = $DBH->("INSERT INTO folks (name, addr, city) value (:name, :addr, :city)");
你希望避免第一種方法。選擇命名我無名佔位符將會對你對語句中數據的設置產生影響。
無名佔位符
01 # assign variables to each place holder, indexed 1-3
02 $STH->bindParam(1, $name);
03 $STH->bindParam(2, $addr);
04 $STH->bindParam(3, $city);
05
06 # insert one row
07 $name = "Daniel"
08 $addr = "1 Wicked Way";
09 $city = "Arlington Heights";
10 $STH->execute();
11
12 # insert another row with different values
13 $name = "Steve"
14 $addr = "5 Circle Drive";
15 $city = "Schaumburg";
16 $STH->execute();
這里有兩步。首先,我們對各個佔位符指定變數(2-4行)。然後,我們對各個佔位符指定數據,並執行語句。要發送另一組數據,只需改變這些變數的值並再次執行語句。
這種方法看上去對擁有很多參數的語句很笨拙吧?的確。然而,當數據保存於數組中時,這非常容易簡略:
1 # the data we want to insert
2 $data = array('Cathy', '9 Dark and Twisty Road', 'Cardiff');
3
4 $STH = $DBH->("INSERT INTO folks (name, addr, city) values (?, ?, ?);
5 $STH->execute($data);
容易吧!
數組中的數據按順序填入佔位符中。 $data[0]是第一個,$data[1]是第二個,依次。不過,要是數組中數據的次序不正確,這將不能正常運行,你需要先對數組排序。
命名佔位符
你可能已經開始猜測語法了,不過下面就是示例:
1 # the first argument is the named placeholder name - notice named
2 # placeholders always start with a colon.
3 $STH->bindParam(':name', $name);
你可以看使用快捷方式,但它需使用關聯數組。下面是示例:
1 # the data we want to insert
2 $data = array( 'name' => 'Cathy', 'addr' => '9 Dark and Twisty', 'city' => 'Cardiff' );
3
4 # the shortcut!
5 $STH = $DBH->("INSERT INTO folks (name, addr, city) value (:name, :addr, :city)");
6 $STH->execute($data);
數組中的鍵不需要以冒號開頭,但其它部分需要同佔位符匹配。如果你有一個二維數組,你只需遍歷它,並對遍歷的每個數組執行語句。
命名佔位符的另一個好的功能是直接將對象插入到你的資料庫中,只要屬性同命名欄位匹配。下面是一個示例對象,以及如何將它插入到資料庫中的示例:
01 # a simple object
02 class person {
03 public $name;
04 public $addr;
05 public $city;
06
07 function __construct($n,$a,$c) {
08 $this->name = $n;
09 $this->addr = $a;
10 $this->city = $c;
11 }
12 # etc ...
13 }
14
15 $cathy = new person('Cathy','9 Dark and Twisty','Cardiff');
16
17 # here's the fun part:
18 $STH = $DBH->("INSERT INTO folks (name, addr, city) value (:name, :addr, :city)");
19 $STH->execute((array)$cathy);
通過在執行時將對象轉換為數組,輸將將會同數組的鍵一樣對待。
㈩ PHP中用PDO操作資料庫時出現ERROR:could not find driver的問題
提示你沒有找到pdo的驅動,如下檢查
1extension=php_pdo.dll這個文件是否存在
2打開windows下的php.ini,查找 extension_dir = "地址",查看這個地址是否有文件夾
3看該文件夾中是否包含上述文件
4新建一個php頁面,輸入<?php phpinfo(); ?>預覽,查看是否已經開啟了先關擴展
我以前遇到過這種情況,就是沒有指定擴展位置,php去查的時候沒找到,就報錯啦