私たちは リスト 1 に取り組んでいます。 Access/get.php
<ol class="dp-xml"> <li class="alt"><span><span><?php </span></span></li> <li class=""><span>function get_user_id( $name ) </span></li> <li class="alt"><span>{ </span></li> <li class=""> <span> $</span><span class="attribute"><font color="#ff0000">db</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">mysql_connect</font></span><span>( 'localhost', 'root', 'password' ); </span> </li> <li class="alt"><span> mysql_select_db( 'users' ); </span></li> <li class=""><span> </span></li> <li class="alt"> <span> $</span><span class="attribute"><font color="#ff0000">res</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">mysql_query</font></span><span>( "SELECT id FROM users WHERE </span><span class="attribute"><font color="#ff0000">login</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">'".$name."'</font></span><span>" ); </span> </li> <li class=""> <span> while( $</span><span class="attribute"><font color="#ff0000">row</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">mysql_fetch_array</font></span><span>( $res ) ) { $</span><span class="attribute"><font color="#ff0000">id</font></span><span> = $row[0]; } </span> </li> <li class="alt"><span> </span></li> <li class=""><span> return $id; </span></li> <li class="alt"><span>} </span></li> <li class=""><span> </span></li> <li class="alt"><span>var_dump( get_user_id( 'jack' ) ); </span></li> <li class=""><span>?> </span></li> </ol>
mysql_connect 関数は、PHP が MySQL を直接使用できるようにするために使用されることに注意してください。また、文字列連結を使用して $name パラメーターをクエリに追加するクエリにも注目してください。
このテクノロジーには、PEAR DB モジュールと PHP データ オブジェクト (PDO) クラスという 2 つの優れた代替手段があります。どちらも、特定のデータベース選択からの抽象化を提供します。そのため、コードは、IBM® DB2®、MySQL、PostgreSQL、または接続したいその他のデータベース上でほとんど調整することなく実行できます。
PEAR DB モジュールと PDO 抽象化レイヤーを使用するもう 1 つの利点は、SQL ステートメントで ? 演算子を使用できることです。これにより、SQL の保守が容易になり、アプリケーションを SQL インジェクション攻撃から保護できます。
PEAR DBを使用した代替コードを以下に示します。
リスト 2. Access/get_good.php
<ol class="dp-xml"> <li class="alt"><span><span><?php </span></span></li> <li class=""><span>require_once("DB.php"); </span></li> <li class="alt"><span> </span></li> <li class=""><span>function get_user_id( $name ) </span></li> <li class="alt"><span>{ </span></li> <li class=""> <span> $</span><span class="attribute"><font color="#ff0000">dsn</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">'mysql://root:password@localhost/users'</font></span><span>; </span> </li> <li class="alt"> <span> $</span><span class="attribute"><font color="#ff0000">db</font></span><span> =& DB::Connect( $dsn, array() ); </span> </li> <li class=""><span> if (PEAR::isError($db)) { die($db->getMessage()); } </span></li> <li class="alt"><span> </span></li> <li class=""> <span> $</span><span class="attribute"><font color="#ff0000">res</font></span><span> = $db->query( 'SELECT id FROM users WHERE </span><span class="attribute"><font color="#ff0000">login</font></span><span>=?',array( $name ) ); </span> </li> <li class="alt"> <span> $</span><span class="attribute"><font color="#ff0000">id</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">null</font></span><span>; </span> </li> <li class=""> <span> while( $res->fetchInto( $row ) ) { $</span><span class="attribute"><font color="#ff0000">id</font></span><span> = $row[0]; } </span> </li> <li class="alt"><span> </span></li> <li class=""><span> return $id; </span></li> <li class="alt"><span>} </span></li> <li class=""><span> </span></li> <li class="alt"><span>var_dump( get_user_id( 'jack' ) ); </span></li> <li class=""><span>?> </span></li> </ol>
$dsn のデータベース接続文字列を除き、PHP が MySQL を直接使用する場所はすべて削除されていることに注意してください。さらに、SQL では ? 演算子を介して $name 変数を使用します。次に、クエリ データは、query() メソッドの最後で配列を通じて送信されます。