五個常見 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 五個常見 PHP 資料庫問題PHP資料庫
- 資料庫常見問題資料庫
- 10個常見的資料庫安全問題資料庫
- 資料庫面試時常見的26個問題資料庫面試
- PHP 常見問題PHP
- informix 幾個常見問題對資料庫版本的要求ORM資料庫
- SQL Server資料庫恢復常見問題SQLServer資料庫
- Oracle資料庫備份、災備的23個常見問題Oracle資料庫
- 20個資料庫常見面試題講解資料庫面試題
- 資料庫建模——powerdesiger常見問題總結資料庫
- 常見問題--oracle物理資料庫結構概述Oracle資料庫
- 常見問題--oracle資料庫安裝準備Oracle資料庫
- SSIS中匯入Excel資料到資料庫的一個常見小問題Excel資料庫
- MySQL資料庫開發常見問題及優化MySql資料庫優化
- DB2資料庫移植常見問題全面解析DB2資料庫
- PHP初學者常見問題集PHP
- 資料庫常見面試題總結資料庫面試題
- 資料探勘常見10大問題
- 常見資料庫資料庫
- 常見資料庫系統之比較 - Oracle資料庫(轉)資料庫Oracle
- 大資料常見問題之資料傾斜大資料
- PHP 安全問題入門:10 個常見安全問題 + 例項講解PHP
- 資料庫人員:常見錯誤(轉)資料庫
- 前端開發常見問題精選(五)前端
- 微信小程式開發常見問題(五)微信小程式
- MySQL資料庫開發常見問題及幾點優化!MySql資料庫優化
- SQL Server資料庫中處理空值時常見問題SQLServer資料庫
- 常見資料庫系統比較之Oracle資料庫(轉)資料庫Oracle
- vi 命令常見問題解答(轉)
- Java常見問題集錦(轉)Java
- Windows 98 常見問題解答(轉)Windows
- C 語言常見問題(轉)
- 3110PHP常見問題PHP
- 安裝PHP常見問題彙總薦PHP
- 資料庫開發基礎---常見面試題資料庫面試題
- 資料庫常見故障及恢復原理(轉)資料庫
- 常見資料庫系統之比較 - DB2資料庫(轉)資料庫DB2
- 騰訊雲資料庫 TencentDB for Memcached一些常見問題的解答資料庫