清單 1. Access/get.php
-
<?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 函數(shù)來實(shí)現(xiàn)PHP直接使用MySQL。還要注意查詢,其中使用字符串連接來向查詢添加 $name 參數(shù)。
該技術(shù)有兩個(gè)很好的替代方案:PEAR DB 模塊和 PHP Data Objects (PDO) 類。兩者都從特定數(shù)據(jù)庫選擇提供抽象。因此,您的代碼無需太多調(diào)整就可以在 IBM? DB2?、MySQL、PostgreSQL 或者您想要連接到的任何其他數(shù)據(jù)庫上運(yùn)行。
使用 PEAR DB 模塊和 PDO 抽象層的另一個(gè)價(jià)值在于您可以在 SQL 語句中使用 ? 操作符。這樣做可使 SQL 更加易于維護(hù),且可使您的應(yīng)用程序免受 SQL 注入攻擊。
使用 PEAR DB 的替代代碼如下所示。
清單 2. Access/get_good.php
-
<?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' ) );
-
?>