国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ php教程 php手冊 php中對Mysql數(shù)據(jù)庫的訪問操作

php中對Mysql數(shù)據(jù)庫的訪問操作

Jun 06, 2016 pm 07:59 PM
mysql php 操作する データベース アクセス

一: PHP-MySQL 是 PHP 操作 MySQL 資料庫最原始的 Extension ,PHP-MySQLi 的 i 代表 Improvement ,提更了相對進階的功能,就 Extension 而言,本身也增加了安全性。而 PDO (PHP Data Object) 則是提供了一個 Abstraction Layer 來操作資料庫,用講的其實

一:?
PHP-MySQL 是 PHP 操作 MySQL 資料庫最原始的 Extension ,PHP-MySQLi 的 i 代表 Improvement ,提更了相對進階的功能,就 Extension 而言,本身也增加了安全性。而 PDO (PHP Data Object) 則是提供了一個 Abstraction Layer 來操作資料庫,用講的其實看不出來有有什麼差別,所以就直接看程序吧…?

首先,先來看一段用 PHP-MySQL 寫成的程式碼,這類的范例常用在世界各地:

?
mysql_connect($db_host, $db_user, $db_password);?
mysql_select_db($dn_name);?
$result = mysql_query("SELECT `name` FROM `users` WHERE `location` = '$location'");?
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))?
{?
echo $row['name'];?
}?
mysql_free_result($result);?
?>?

乍看之下沒什麼問題,但其實背后有些學(xué)問…?
這種方式不能 Bind Column ,以前例的 SQL 敘述來說,$location 的地方容易被 SQL Injection。后來于是發(fā)展出了 mysql_escape_string() (備注:5.3.0之后棄用) 以及 mysql_real_escape_string() 來解決這個問題,不過這麼一搞,整個敘述會變得複雜且丑陋,而且如果欄位多了,可以想見會是怎樣的情形…?

$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",?
mysql_real_escape_string($user),?
mysql_real_escape_string($password));?
mysql_query($query);?
?>?

在 PHP-MySQLi 中有了不少進步,除了透過 Bind Column 來解決上述問題,而且也多援 Transaction, Multi Query ,并且同時提供了 Object oriented style (下面這段 PHP-MySQLi 范例的寫法) 和 Procedural style (上面 PHP-MySQL 范例的寫法)兩種寫法…等等。

$mysqli = new mysqli($db_host, $db_user, $db_password, $db_name);?
$sql = "INSERT INTO `users` (id, name, gender, location) VALUES (?, ?, ?, ?)";?
$stmt = $mysqli->prepare($sql);?
$stmt->bind_param('dsss', $source_id, $source_name, $source_gender, $source_location);?
$stmt->execute();?
$stmt->bind_result($id, $name, $gender, $location);?
while ($stmt->fetch())?
{?
echo $id . $name . $gender . $location;?
}?
$stmt->close();?
$mysqli->close();?
?>?

但看到這邊又發(fā)現(xiàn)了一些缺點,例如得 Bind Result,這個就有點多馀,不過這其實無關(guān)緊要,因為最大的問題還是在于這不是一個抽象(Abstraction)的方法,所以當后端更換資料庫的時候,就是痛苦的開始…?
于是 PDO 就出現(xiàn)了(備注:目前 Ubuntu 和 Debian 來說,PDO 并沒有直接的套件可以安裝,而是必須透過 PECL 安裝)。?

roga@carlisten-lx:~$ pecl search pdo?
=======================================?
Package Stable/(Latest) Local?
PDO 1.0.3 (stable) PHP Data Objects Interface.?
PDO_4D 0.3 (beta) PDO driver for 4D-SQL database?
PDO_DBLIB 1.0 (stable) FreeTDS/Sybase/MSSQL driver for PDO?
PDO_FIREBIRD 0.2 (beta) Firebird/InterBase 6 driver for PDO?
PDO_IBM 1.3.2 (stable) PDO driver for IBM databases?
PDO_INFORMIX 1.2.6 (stable) PDO driver for IBM Informix INFORMIX databases?
PDO_MYSQL 1.0.2 (stable) MySQL driver for PDO?
PDO_OCI 1.0 (stable) Oracle Call Interface driver for PDO?
PDO_ODBC 1.0.1 (stable) ODBC v3 Interface driver for PDO?
PDO_PGSQL 1.0.2 (stable) PostgreSQL driver for PDO?
PDO_SQLITE 1.0.1 (stable) SQLite v3 Interface driver for PDO?
pdo_user 0.3.0 (beta) Userspace driver for PDO?

當透過 PECL 安裝裝好后,就可以透過以下方式來操作資料庫:?

$dsn = "mysql:host=$db_host;dbname=$db_name";?
$dbh = new PDO($dsn, $db_user, $db_password);?
$sql = "SELECT `name`, `location` FROM `users` WHERE `location` = ? , `name` = ?";?
$sth = $dbh->prepare($sql);?
$sth->execute(array($location, $name));?
$result = $sth->fetch(PDO::FETCH_OBJ);?
echo $result->name . $result->location;?
$dbh = NULL;?
?>?
乍看之下,PDO 的程式碼好像也沒有比較短,那到底好處是什麼呢??
1. PDO 連接資料庫時透過 Connection String 來決定連接何種資料庫。?
2. PDO 可以透過 PDO::setAttribute 來決定連線時的設(shè)定,像是 Persistent Connection, 回傳錯誤的方式(Exception, E_WARNING, NULL)。甚至是回傳欄位名稱的大小寫…等等。?
2. PDO 支援 Bind Column 的功能,除了基本的 Prepare, Execute 以外,也可以 Bind 單一欄位,并且指定欄位型態(tài)。?
4. PDO 是 Abstraction Layer 所以就算更換儲存媒介,需要花的功夫比起來是最少的。?
可惜的是,儘管這些東西都已經(jīng)出現(xiàn)很久了,但還是不夠大眾化。我想或許是肇因于大家習慣看坊間的書籍學(xué)習,但那些書本往往只會介紹最簡單最傳統(tǒng)的方式。導(dǎo)致很多人還是在用 MySQL 這種方直接連資料庫。?
不過,目前來說我個人還是最喜愛透過 DBI 來連接資料庫,像是 ActiveRecord 以及 Propel ORM(Object-Relational Mapping)。?
例如說以 ActiveRecord 為例,如果要實現(xiàn)這樣的 SQL 敘述…?
INSERT INTO `users` (id, name, gender, location) VALUES(1, 'roga', 'male', 'tpe')?
以 PDO 來寫是:?

$sql = "INSERT INTO `users` (id, name, gender, location) VALUES(?, ?, ?, ?)";?
$sth = $dbh->prepare($sql);?
$sth->execute(array(1, 'roga', 'male', 'tpe'));?
?>?

但以 ActiveRecord 來說的話,則是:?

$user = new User();?
$user->id = 1;?
$user->name = 'roga';?
$user->gender = 'male';?
$user->location = 'tpe';?
$user->save();?
?>?

后者在語法上是不是簡潔很多呢,而且也大幅降低對 SQL 語言的依賴性!(不同資料庫對 SQL 實作的問題可參考 Comparison of different SQL implementations)?

mysql是非持繼連接函數(shù)而mysqli是永遠連接函數(shù)。也就是說?
mysql每次鏈接都會打開一個連接的進程而mysqli多次運行mysqli將使用同一連接進程,從而減少了服務(wù)器的開銷?
有些朋友在編程的時候,使用new mysqli('localhost', usenamer', 'password', 'databasename');總是報?
錯,F(xiàn)atal error: Class 'mysqli' not found in d:\...?
mysqli類不是php自帶的嗎??
不是默認開啟的,win下要改php.ini,去掉php_mysqli.dll前的;,linux下要把mysqli編譯進去。?
一:Mysqli.dll是一個允許以對象的方式或者過程操作數(shù)據(jù)庫的,它的使用方式也很容易。這里就幾個常見的操作和 mysql.dll做一個對比。?
  1: ?mysql.dll(可以理解為函數(shù)式的方式):?

復(fù)制代碼代碼如下:


  $conn = mysql_connect('localhost', 'user', 'password'); //連接mysql數(shù)據(jù)庫?
  mysql_select_db('data_base'); //選擇數(shù)據(jù)庫?
  ?
  $result = mysql_query('select * from data_base');//這里有第二個可選參數(shù),指定打開的連接?
  $row = mysql_fetch_row( $result ) ) //為了簡單,這里只取一行數(shù)據(jù)?
  echo $row[0]; //輸出第一個字段的值?


  mysqli也有過程式的方式,只不過開始貫以mysqli的前綴,其他都差不多。如果mysqli以過程式的方式操作的話, 有些函數(shù)必須指定資源,比如說 mysqli_query(資源標識,SQL語句),并且資源標識的參數(shù)是放在前面的,而 mysql_query(SQL語句,'可選')的資源標識是放在后面的,并且可以不指定,它默認是上一個打開的連接或資源。?
  2 ?mysqli.dll(對象方式):?

復(fù)制代碼代碼如下:


  $conn = new mysqli('localhost', 'user', 'password','data_base');?
  //這里的連接是new出來的,最后一個參數(shù)是直接指定數(shù)據(jù)庫,不用 ? ? ? ? ? ? ? ? ? mysql_select_db()了?
  //也可以構(gòu)造時候不指定,然后 $conn -> select_db('data_base')?
  $result = $conn -> query( 'select * from data_base' );?
  $row = $result -> fetch_row(); //取一行數(shù)據(jù)?
  echo row[0]; //輸出第一個字段的值?


  二:mysql_fetch_row(),mysql_fetch_array()?
  這兩個函數(shù),返回的都是一個數(shù)組,區(qū)別就是第一個函數(shù)返回的數(shù)組是只包含值,我們只能$row[0],?
? ? ? $row[1],這樣以數(shù)組下標來讀取數(shù)據(jù),而mysql_fetch_array()返回的數(shù)組既包含第一種,也包含鍵值?
? ? ? 對的形式,我們可以這樣讀取數(shù)據(jù),(假如數(shù)據(jù)庫的字段是 username,passwd):?
  $row['username'], $row['passwd']?
  而且,如果用($row as $kay => $value)來操作的話,還以直接取得數(shù)據(jù)庫的字段名稱。?
  更主要的是mysqli是php5提供的新函數(shù)庫,(i)表示改進,其執(zhí)行速度更快.


このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當する法的責任を負いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPでのオブジェクトリレーショナルマッピング(ORM)パフォーマンスチューニング PHPでのオブジェクトリレーショナルマッピング(ORM)パフォーマンスチューニング Jul 29, 2025 am 05:00 AM

n 1クエリの問題を避け、関連するデータを事前にロードすることにより、データベースクエリの數(shù)を減らします。 2.必要なフィールドのみを選択して、メモリと帯域幅を保存するために完全なエンティティをロードしないようにします。 3. DoctrineのセカンダリキャッシュやRedis Cacheの高周波クエリ結(jié)果など、キャッシュ戦略を合理的に使用します。 4.エンティティのライフサイクルを最適化し、クリア()を定期的に呼び出してメモリを解放してメモリオーバーフローを防ぎます。 5.データベースインデックスが存在し、生成されたSQLステートメントを分析して、非効率的なクエリを避けます。 6.変更が不要なシナリオで自動変更追跡を無効にし、パフォーマンスを改善するためにアレイまたは軽量モードを使用します。 ORMを正しく使用するには、SQLモニタリング、キャッシュ、バッチ処理、適切な最適化を組み合わせて、開発効率を維持しながらアプリケーションのパフォーマンスを確保する必要があります。

vscode settings.jsonの場所 vscode settings.jsonの場所 Aug 01, 2025 am 06:12 AM

settings.jsonファイルは、ユーザーレベルまたはワークスペースレベルのパスにあり、VSCODE設(shè)定のカスタマイズに使用されます。 1。ユーザーレベルのパス:WindowsはC:\ users \\ appdata \ roaming \ code \ user \ settings.json、macos is/users //settings.json、linux is /home/.config/code/user/settings.json; 2。Workspace-Level Path:.vscode/settings Project Root Directoryの設(shè)定

PHPの內(nèi)部ガベージコレクションメカニズムに深く潛ります PHPの內(nèi)部ガベージコレクションメカニズムに深く潛ります Jul 28, 2025 am 04:44 AM

PHPのゴミ収集メカニズムは參照カウントに基づいていますが、周期的な円形のゴミコレクターによって円形の參照を処理する必要があります。 1。変數(shù)への參照がない場合、參照カウントはすぐにメモリを解放します。 2.參照參照により、メモリを自動的にリリースできなくなり、GCを検出およびクリーニングすることがGCに依存します。 3。GCは、「可能なルート」ZVALがしきい値に到達するか、GC_COLLECT_CYCLES()を手動で呼び出すとトリガーされます。 4.長期実行PHPアプリケーションは、メモリの漏れを避けるために、gc_status()を監(jiān)視し、gc_collect_cycles()を呼び出す必要があります。 5.ベストプラクティスには、gc_disable()を使用してパフォーマンスキー領(lǐng)域を最適化し、ormのclear()メソッドを介して繰り返しのオブジェクトを最適化する回路參照の回避が含まれます。

サーバーレス革命:BREFを使用してスケーラブルなPHPアプリケーションを展開します サーバーレス革命:BREFを使用してスケーラブルなPHPアプリケーションを展開します Jul 28, 2025 am 04:39 AM

BREFにより、PHP開発者は、サーバーを管理せずにスケーラブルで費用対効果の高いアプリケーションを構(gòu)築できます。 1.Brefは、最適化されたPHPランタイムレイヤーを提供し、PHP8.3およびその他のバージョンをサポートし、LaravelやSymfonyなどのフレームワークとシームレスに統(tǒng)合することにより、PHPをAwslambdaにもたらします。 2。展開手順には、次のものが含まれます。Composerを使用してBREFのインストール、httpエンドポイントや職人コマンドなどの関數(shù)とイベントを定義するためにserverless.ymlの構(gòu)成。 3. serverlessdeployコマンドを?qū)g行して、展開を完了し、Apigatewayを自動的に構(gòu)成し、アクセスURLを生成します。 4。Lambdaの制限については、Brefは解決策を提供します。

Readonlyプロパティを備えたPHPに不変のオブジェクトを構(gòu)築します Readonlyプロパティを備えたPHPに不変のオブジェクトを構(gòu)築します Jul 30, 2025 am 05:40 AM

readonlypropertiesinphp8.2canonlybeassignedonedonedontheconstructoraturatiddeclaration andcannotBemodifiedifiedifiedifiedifiedifiedifiedifiadtivedabilityattthelanguagelele.2.

PHPを機械學(xué)習モデルと統(tǒng)合します PHPを機械學(xué)習モデルと統(tǒng)合します Jul 28, 2025 am 04:37 AM

usearestapitobridgephpandmlmodelsbyrunningthemodelinpythonviaflaskorapiandapiandcallingtfromphpusingcurlorguzzle.2.runpythosscriptsdirectlyfrompurspusingec()orshell_exec()

CSSダークモードのトグル例 CSSダークモードのトグル例 Jul 30, 2025 am 05:28 AM

まず、JavaScriptを使用して、ユーザーシステムの設(shè)定とローカルに保存されたテーマ設(shè)定を取得し、ページテーマを初期化します。 1. HTML構(gòu)造には、トピックの切り替えをトリガーするボタンが含まれています。 2。CSSの使用:rootは明るいテーマ変數(shù)を定義し、.dark-modeクラスは暗いテーマ変數(shù)を定義し、これらの変數(shù)をvar()を介して適用します。 3. JavaScript検出は、カラーのスchemeを好み、LocalStorageを読み取り、最初のテーマを決定します。 4.ボタンをクリックするときにHTML要素のダークモードクラスを切り替え、現(xiàn)在の狀態(tài)をLocalStorageに保存します。 5.すべての色の変更には、ユーザーを強化するために0.3秒の移行アニメーションが伴います

Laravelでデータベースをシードする方法は? Laravelでデータベースをシードする方法は? Jul 28, 2025 am 04:23 AM

シーダーファイルの作成:phpartisanmake:seederuserseederを使用してシーダークラスを生成し、実行方法のモデルファクトリーまたはデータベースクエリを介してデータを挿入します。 2。Databaseseederで他のシーダーを呼び出す:sulderseeder、Postseederなどを登録$ this-> call()を介して依存関係が正しいことを確認します。 3。シーダーの実行:PHPARTISANDBを?qū)g行する:種子をすべて登録したすべてのシーダーを?qū)g行するか、PHPARTISANMIGRATE:FRESS-シードを使用してデータをリセットして補充します。 4

See all articles