PHP中MySQLデータベース接続、データ読み書き、修正方法

13189 ワード

MySQL接続が大きい場合はmysqliとmysqlの2つの方法があります.phpはMySQLに接続するために関数ライブラリを提供し、mysqlとmysqliがあり、mysqliはmysql関数ライブラリの拡張であり、php 5でサポートされています.mysqli関数ライブラリを使用してMySQLに接続する場合は、phpのプロファイルphpを確認します.iniのextension=php_mysqli.dllは開いています(文の前にセミコロン(;).改行は注釈であることを示すセミコロンがある).
次の2つの接続方法について説明します.
一、mysqli接続は、プロセス向けの方法でもオブジェクト向けの方法でも使用できます.
1.オブジェクト向けの接続方法.
次に、オプションで検索するタイプsearchtypeと検索内容searchtermを含む検索フォームを一例として説明する.
 1 <?php

 2     $searchtype = trim($_POST['searchtype']);

 3     $searchterm = trim($_POST['searchterm']);

 4     if(!$searchtype || !$searchterm){

 5         echo 'You have not entered search details. Please go back and try again.';

 6         exit;

 7     }

 8     if(!get_magic_quotes_gpc()){

 9         $searchtype = addslashes($searchtype);

10         $searchterm = addslashes($searchterm);

11     }

12     @ $db = new mysqli('localhost', 'root', '','books');

13     if(mysqli_connect_errno()){                             

14         echo 'Error:mysql connect false.';

15         exit;

16     }

17     $query = "SELECT * from book where ".$searchtype." like '%" .$searchterm."%'";

18     $result = $db->query($query);

19     $num_results = $result->num_rows;

20     echo 'Number of books found:'.$num_results;

21     for($i = 0; $i < $num_results; $i++){

22         $row = $result->fetch_assoc();

23         var_dump($row);

24         echo '<p><strong>'.($i+1).'.Title: ';

25         echo htmlspecialchars(stripslashes($row['title']));

26         echo '</strong></br>Author: ';

27         echo htmlspecialchars(stripslashes($row['author']));

28         echo '<br />ISBN: ';

29         echo htmlspecialchars(stripslashes($row['isbn']));

30         echo '<br />Price:';

31         echo htmlspecialchars(stripslashes($row['price']));

32         echo '</p>';

33     }

34     $result->free();

35     $db->close();

36 ?>

出力結果:
Number of books found:2
1.Title: Java 2 for Professionan DevelopsAuthor: Michael MorganISBN: 0-672-31697-8Price:34.99
2.Title: PHP and MySQL Web DevelopmentAuthor: Luke Welling Laura TISBN: 978-7-111-26281-7Price:95
データベースに接続する手順は、次のとおりです.
  • @ $db = new mysqli('localhost', 'root', '','books');データベースの接続;@エラー抑制オペレータのために、通常はデータベースに接続するときに使用されます.myslqiの後ろには4つのパラメータがあります.これにより、接続されたホスト、データベースのアカウント、パスワード、データベースが接続されます.プロシージャメソッドは@$db=mysqli_connect('localhost', 'root', '','books');
  • 前の文の4番目のパラメータは、4番目のパラメータがない場合は、データベースをクエリーする前にデータベースを選択し、オブジェクト向けメソッド、$db->select_db('books');,プロセスの方法mysqli_select_db(db_resourse, db_name);.
  • mysqli_connect_errno()データベース接続結果チェック、接続が正常に0に返された場合、エラー番号が返されます.オブジェクト向けとプロセス向けの方法はいずれもこの判断方法であり,コードは同じである.
  • $query = "SELECT * from book where ".$searchtype."like '%".$searchterm."%'";クエリー条件を確立します.この文のbookはクエリーするテーブルです.
  • $result = $db->query($query);クエリ条件を実行します.プロシージャ向けの関数はmysqli_です.query($db,$query); $dbは、接続データベースに返されるリソースです.クエリーすると、オブジェクト向けは結果オブジェクトを返し、プロシージャ・バージョンは結果リソースを返します.関数の実行に失敗しfalseを返す.
  • $num_results = $result->num_rows;クエリ条件がSELECTを使用する場合、オブジェクト指向メソッドを使用する場合、クエリの影響する行数は、結果を返すnum_に保存されます.rowsのメンバー変数です.プロシージャ向けメソッドを使用する場合は、関数mysqli_を使用します.num_rows($result);.クエリ条件がINSERT、UPDATEなどの非SELECTの場合は$result->affected_を使用しますrowsまたはmysqli_affected_rows($result).
  • $row = $result->fetch_assoc(); この関数はresultde結果セットから1行のデータを取得して配列として返し,各結果の列は1つの配列のセルに格納され,オフセット量は0から始まる.結果セットに戻る次の行を順次呼び出し、それ以上の行がない場合はFLASEを返す.関連配列の各キーワードは属性名(配列のフィールド名、例では$row['title']など)であり、各値は配列の対応する値である.呼び出しのたびに、結果セットの行が終了するまで戻る.プロセスの方法mysqli_fetch_assoc($result).さらに、$row=$result->fetch_row(),$row=mysqli_fetch_row($result);この関数と上記の関数の違いは,数値インデックス$row[0],$row[1]などを用いることである.row=$result->fetch_array(),$row=mysqli_fetch_array($result);この関数と上記の関数の違いは、数値インデックスを使用するか、関連インデックスを使用するかです.$row=$result->fetch_object(),$row=mysqli_fetch_object($result)は、配列ではなく1行を1つのオブジェクトに取り出し、$row->title、$row->authorなどで各プロパティにアクセスします.
  • $result->free();mysqli_free_result($result);結果セットを解放し、メモリを解放します.結果セットが大きい場合は、使用することをお勧めします.$db->close();mysqli_close($db);非永続的なデータベース接続を閉じ、mysqli_を閉じません.pconnect()で確立された永続的な接続.厳密には、スクリプトの実行が完了すると自動的に閉じるので、これは必須ではありません.

  • さらに注意すべき関数は次のとおりです.
  • trim()は、文字列の両端のスペースを除去します.入力テキストボックスでよく使用する
  • get_magic_quotes_gpc()、addslashes()、stripslashes().文字列の場合、データベースに格納されると、単一の二重引用符、反スラッシュ()、NULL文字の制御子として解析される文字もあります.したがって、addslashes()を使用して、これらの文字をエスケープ処理(これらの文字の前に反スラッシュを追加)する必要があります.ブラウザでページに表示するときはstripslashes()で追加したスラッシュを削除します.ただしPHP構成ではmagic_quotes_gpc(gpc get post cookie)構成命令は、自動的に反スラッシュを追加(除去できない)ことができ、構成命令magic_quotes_gpcが自動エスケープ文字の追加を開き、addslashes()を介して手動でエスケープ文字を追加すると繰り返します.したがって、エスケープ文字を追加する前にget_を使用する必要があります.magic_quotes_gpc()関数は、この構成命令がオンであるか否かを判断し、手動でエスケープ文字を追加しない場合、オンである.get_を開くとmagic_quotes_gpc()はtrueを返す.マジック引用符を追加すると移植性が向上します.
  • htmlspecialchars()htmlの特殊文字を符号化します.たとえば&<>」などです.この関数を使用すると、発生する可能性のあるエラーをクリアできます.
  • 2.プロセス向けの接続方法
    @ $db=mysqli_connect('localhost', 'root', '', 'books') or die('Unable to connect');  //           ,         。mysqli_select_db($db, 'books');
    
    //         if(mysqli_connect_errno()){echo 'Unable to connect'; exit;}
    
    $query = SELECT * from book;
    
    $result = mysqli_query($db, $query);
    
    $result_num =mysqli_num_rows($result);
    
    while($row=mysqli_fecth_assoc($result)){
    
        echo $row['title'];        
    
    }
    
    
  • プロシージャ向けメソッドでは、判断文はdie()関数とmysqli_を使用できます.connect_errno()ですが、オブジェクト向けの方法ではmysqli_しか使用できませんconnect_errno().
  • mysqliの多くの関数には、オブジェクト向けおよびプロシージャ向けのインタフェースがあります.通常、両者の違いは、プロシージャバージョン関数名がmysqli_であることです.最初はmysqli_に転送されます接続()で取得したリソースハンドル.
  • mysqli_fectch_assoc()は関連配列で結果セットを返し、それ以上の行がなければFLASEを返す.

  • 二、mysql接続
    mysql接続はプロシージャ向けの接続のみです.
     1 //      
    
     2 @ $db_connect=mysql_connect($dbhost,$username,$userpass) or die("Unable to connect to the MySQL!");
    
     3 
    
     4 //            
    
     5 mysql_select_db($dbdatabase,$db_connect);
    
     6 
    
     7 //  MySQL  
    
     8 $result=mysql_query("SELECT id,name FROM user");
    
     9 
    
    10 //    
    
    11 $row=mysql_fetch_row($result);
  •  mysql_connect()には、3つのパラメータ、ホスト名、データベースユーザー名、パスワードしかありません.データベース名は含まれません.mysqli接続時にデータベースを直接含めることができます.そこで次にmysql_を使いますconnect_db()でデータベースを選択します.
  • データを抽出しmysqlを除くfetch_row()とmysql_fetch_array()とmysql_fetch_assoc()にはオブジェクト向けの方法はありません.