五個常見 PHP 資料庫問題(轉)
五個常見 PHP 資料庫問題(轉)[@more@]揭露 PHP 應用程式中出現的五個常見資料庫問題 —— 包括資料庫模式設計、資料庫訪問和使用資料庫的業務邏輯程式碼 —— 以及它們的解決方案。
如果只有一種 方式使用資料庫是正確的……
您可以用很多的方式建立資料庫設計、資料庫訪問和基於資料庫的 PHP 業務邏輯程式碼,但最終一般以錯誤告終。本文說明了資料庫設計和訪問資料庫的 PHP 程式碼中出現的五個常見問題,以及在遇到這些問題時如何修復它們。
問題 1:直接使用 MySQL
一個常見問題是較老的 PHP 程式碼直接使用 mysql_ 函式來訪問資料庫。清單 1 展示瞭如何直接訪問資料庫。
清單 1. Access/get.php
function get_user_id( $name )
{
$db = mysql_connect( 'localhost', 'root', 'password' );
mysql_select_db( 'users' );
$res = mysql_query( "SELECT id FROM users WHERE login='".$name."'" );
while( $row = mysql_fetch_array( $res ) ) { $id = $row[0]; }
return $id;
}
var_dump( get_user_id( 'jack' ) );
?>
注意使用了 mysql_connect 函式來訪問資料庫。還要注意查詢,其中使用字串連線來向查詢新增 $name 引數。
該技術有兩個很好的替代方案:PEAR DB 模組和 PHP Data Objects (PDO) 類。兩者都從特定資料庫選擇提供抽象。因此,您的程式碼無需太多調整就可以在 IBM® DB2®、MySQL、PostgreSQL 或者您想要連線到的任何其他資料庫上執行。
使用 PEAR DB 模組和 PDO 抽象層的另一個價值在於您可以在 SQL 語句中使用 ? 運算子。這樣做可使 SQL 更加易於維護,且可使您的應用程式免受 SQL 注入攻擊。
使用 PEAR DB 的替代程式碼如下所示。
清單 2. Access/get_good.php
require_once("DB.php");
function get_user_id( $name )
{
$dsn = 'mysql://root:password@localhost/users';
$db =& DB::Connect( $dsn, array() );
if (PEAR::isError($db)) { die($db->getMessage()); }
$res = $db->query( 'SELECT id FROM users WHERE login=?',
array( $name ) );
$id = null;
while( $res->fetchInto( $row ) ) { $id = $row[0]; }
return $id;
}
var_dump( get_user_id( 'jack' ) );
?>
注意,所有直接用到 MySQL 的地方都消除了,只有 $dsn 中的資料庫連線字串除外。此外,我們透過 ? 運算子在 SQL 中使用 $name 變數。然後,查詢的資料透過 query() 方法末尾的 array 被髮送進來。
如果只有一種 方式使用資料庫是正確的……
您可以用很多的方式建立資料庫設計、資料庫訪問和基於資料庫的 PHP 業務邏輯程式碼,但最終一般以錯誤告終。本文說明了資料庫設計和訪問資料庫的 PHP 程式碼中出現的五個常見問題,以及在遇到這些問題時如何修復它們。
問題 1:直接使用 MySQL
一個常見問題是較老的 PHP 程式碼直接使用 mysql_ 函式來訪問資料庫。清單 1 展示瞭如何直接訪問資料庫。
清單 1. Access/get.php
function get_user_id( $name )
{
$db = mysql_connect( 'localhost', 'root', 'password' );
mysql_select_db( 'users' );
$res = mysql_query( "SELECT id FROM users WHERE login='".$name."'" );
while( $row = mysql_fetch_array( $res ) ) { $id = $row[0]; }
return $id;
}
var_dump( get_user_id( 'jack' ) );
?>
注意使用了 mysql_connect 函式來訪問資料庫。還要注意查詢,其中使用字串連線來向查詢新增 $name 引數。
該技術有兩個很好的替代方案:PEAR DB 模組和 PHP Data Objects (PDO) 類。兩者都從特定資料庫選擇提供抽象。因此,您的程式碼無需太多調整就可以在 IBM® DB2®、MySQL、PostgreSQL 或者您想要連線到的任何其他資料庫上執行。
使用 PEAR DB 模組和 PDO 抽象層的另一個價值在於您可以在 SQL 語句中使用 ? 運算子。這樣做可使 SQL 更加易於維護,且可使您的應用程式免受 SQL 注入攻擊。
使用 PEAR DB 的替代程式碼如下所示。
清單 2. Access/get_good.php
require_once("DB.php");
function get_user_id( $name )
{
$dsn = 'mysql://root:password@localhost/users';
$db =& DB::Connect( $dsn, array() );
if (PEAR::isError($db)) { die($db->getMessage()); }
$res = $db->query( 'SELECT id FROM users WHERE login=?',
array( $name ) );
$id = null;
while( $res->fetchInto( $row ) ) { $id = $row[0]; }
return $id;
}
var_dump( get_user_id( 'jack' ) );
?>
注意,所有直接用到 MySQL 的地方都消除了,只有 $dsn 中的資料庫連線字串除外。此外,我們透過 ? 運算子在 SQL 中使用 $name 變數。然後,查詢的資料透過 query() 方法末尾的 array 被髮送進來。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-960524/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫常見問題資料庫
- 10個常見的資料庫安全問題資料庫
- 資料庫面試時常見的26個問題資料庫面試
- PHP 常見問題PHP
- SQL Server資料庫恢復常見問題SQLServer資料庫
- Oracle資料庫備份、災備的23個常見問題Oracle資料庫
- 大資料常見問題大資料
- 20個資料庫常見面試題講解資料庫面試題
- 常見資料庫資料庫
- PHP 安全問題入門:10 個常見安全問題 + 例項講解PHP
- 資料庫常見面試題總結資料庫面試題
- MySQL資料庫開發常見問題及幾點優化!MySql資料庫優化
- 前端開發常見問題精選(五)前端
- grub常見的幾個問題
- mybatis常見庫及問題彙總MyBatis
- 資料庫安全問題?這裡有10個最常見的資料庫
- 微信小程式開發常見問題(五)微信小程式
- 常見問題
- 騰訊雲資料庫 TencentDB for Memcached一些常見問題的解答資料庫
- 談談大資料採集和常見問題大資料
- Windows共享資料夾常見問題解決方法Windows
- Laravel 個人開發常見問題Laravel
- 入行 AI 的幾個常見問題AI
- 常見的6個Python資料視覺化庫!Python視覺化
- 遊戲開發者談遊戲行業融資時常見的五個問題遊戲開發行業
- InnoDB儲存引擎鎖機制(五、 常見問題)儲存引擎
- db2資料庫的操作以及一些常見問題解決DB2資料庫
- IPv6轉換常見問題盤點
- XSS常見問題
- Mysql:常見問題MySql
- MyBatis常見問題MyBatis
- 【Nginx】常見問題Nginx
- ndk 常見問題
- java 常見問題Java
- js常見問題JS
- Homestead 常見問題
- Apache 常見問題Apache
- Linux 常見問題Linux
- Git 常見問題Git