Contents
PHPとMySQL2
続きになります。
-
- PHPを使用したMySQLデータベースの削除 – このセクションでは、PHPを使用してMySQLデータベースとテーブルを削除する方法について説明します。
データベースの削除
<?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'DROP TABLE employee'; $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not delete table employee: ' . mysql_error()); } echo "Table deleted successfully\n"; mysql_close($conn); ?>
- PHPを使用したMySQLデータベースの削除 – このセクションでは、PHPを使用してMySQLデータベースとテーブルを削除する方法について説明します。
テーブルの削除
もう一度、mysql_query関数を使って 1つのSQLコマンドを発行して、データベーステーブルを削除してください。しかし、このコマンドを使用している間は、テーブルにある重要な情報を削除することができるので、非常に注意してください。
例
次の例を試して、テーブルを削除してください –
- MySQLデータベースにデータを挿入する – データベースとテーブルを作成したら、作成したテーブルにデータを挿入します。このセッションでは、データ挿入に関する実際の例を紹介します。
PHP関数mysql_queryを使用してSQL INSERT文を実行すると、MySQLテーブルにデータを入力できます。以下は、従業員テーブルにレコードを挿入する簡単な例です。
例
レコードを従業員表に挿入するには、次の例を試してください。
<?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'INSERT INTO employee '. '(emp_name,emp_address, emp_salary, join_date) '. 'VALUES ( "guest", "XYZ", 2000, NOW() )'; mysql_select_db('test_db'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not enter data: ' . mysql_error()); } echo "Entered data successfully\n"; mysql_close($conn); ?>
実際のアプリケーションでは、HTMLフォームを使用してすべての値が取得され、それらの値はPHPスクリプトを使用してキャプチャされ、最後にMySQLテーブルに挿入されます。
データを入力する際に、関数get_magic_quotes_gpc()を使って魔法のクォートの現在の設定が設定されているかどうかをチェックするのがベストプラクティスです。この関数がfalseを返す場合は、関数addslashes()を使用して引用符の前にスラッシュを追加します。
例
この例を試してください
<html> <head> <title>SQLへ新しいレコードを入れる</title> </head> <body> <?php if(isset($_POST['add'])) { $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } if(! get_magic_quotes_gpc() ) { $emp_name = addslashes ($_POST['emp_name']); $emp_address = addslashes ($_POST['emp_address']); }else { $emp_name = $_POST['emp_name']; $emp_address = $_POST['emp_address']; } $emp_salary = $_POST['emp_salary']; $sql = "INSERT INTO employee ". "(emp_name,emp_address, emp_salary, join_date) ". "VALUES('$emp_name','$emp_address',$emp_salary, NOW())"; mysql_select_db('test_db'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not enter data: ' . mysql_error()); } echo "Entered data successfully\n"; mysql_close($conn); }else { ?> <form method = "post" action = "<?php $_PHP_SELF ?>"> <table width = "400" border = "0" cellspacing = "1" cellpadding = "2"> <tr> <td width = "100">Employee Name</td> <td><input name = "emp_name" type = "text" id = "emp_name"></td> </tr> <tr> <td width = "100">Employee Address</td> <td><input name = "emp_address" type = "text" id = "emp_address"></td> </tr> <tr> <td width = "100">Employee Salary</td> <td><input name = "emp_salary" type = "text" id = "emp_salary"></td> </tr> <tr> <td width = "100"> </td> <td> </td> </tr> <tr> <td width = "100"> </td> <td> <input name = "add" type = "submit" id = "add" value = "Add Employee"> </td> </tr> </table> </form> <?php } ?> </body> </html>
- MySQLデータベースからデータを取得する – PHPを使用してMySQLデータベースからレコードを取得する方法を学びます。
最もよく使われるオプションは、mysql_fetch_array()関数を使うことです。この関数は、行を連想配列、数値配列、またはその両方として返します。このファンクションは、それ以上行がない場合はFALSEを戻します。
以下は、employeeテーブルからレコードを取得する簡単な例です。
例
次の例を試して、従業員テーブルからすべてのレコードを表示してください。
<?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT emp_id, emp_name, emp_salary FROM employee'; mysql_select_db('test_db'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) { echo "EMP ID :{$row['emp_id']} <br> ". "EMP NAME : {$row['emp_name']} <br> ". "EMP SALARY : {$row['emp_salary']} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn); ?>
行の内容は変数$ rowに割り当てられ、行内の値が出力されます。
注 – 配列値を文字列に直接挿入する場合は、常に中括弧を入れてください。
上記の例では、定数MYSQL_ASSOCがmysql_fetch_array()の2番目の引数として使用され、連想配列として行が返されます。連想配列では、索引を使用せずに名前を使用してフィールドにアクセスできます。
PHPは、mysql_fetch_assoc()という別の関数を提供しています。この関数は連想配列として行を返します。
例
次の例を試して、mysql_fetch_assoc()関数を使用して従業員テーブルからすべてのレコードを表示してください。
<?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT emp_id, emp_name, emp_salary FROM employee'; mysql_select_db('test_db'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_assoc($retval)) { echo "EMP ID :{$row['emp_id']} <br> ". "EMP NAME : {$row['emp_name']} <br> ". "EMP SALARY : {$row['emp_salary']} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn); ?>
また、mysql_fetch_array()の第2引数として定数MYSQL_NUMを使用することもできます。これにより、関数は数値インデックスを持つ配列を返すようになります。
例
次の例を試して、MYSQL_NUM引数を使用して従業員表のすべてのレコードを表示してください。
<?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT emp_id, emp_name, emp_salary FROM employee'; mysql_select_db('test_db'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_NUM)) { echo "EMP ID :{$row[0]} <br> ". "EMP NAME : {$row[1]} <br> ". "EMP SALARY : {$row[2]} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn); ?>
上記の3つの例はすべて同じ結果を生成します。
メモリーの解放
各SELECTステートメントの最後にカーソル・メモリーを解放することをお勧めします。これは、PHP関数mysql_free_result()を使用して行うことができます。以下はその使い方を示す例です。
例
次の例を試してみてください
<?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT emp_id, emp_name, emp_salary FROM employee'; mysql_select_db('test_db'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_NUM)) { echo "EMP ID :{$row[0]} <br> ". "EMP NAME : {$row[1]} <br> ". "EMP SALARY : {$row[2]} <br> ". "--------------------------------<br>"; } mysql_free_result($retval); echo "Fetched data successfully\n"; mysql_close($conn); ?>
データをフェッチする際には、好きなだけ複雑なSQLとして記述できます。手順は上記と同じです。
- PHPによるページングの使用 – これは、複数のページにクエリ結果を表示する方法と、ナビゲーションリンクを作成する方法について説明しています。
SQL SELECT文のクエリが何千ものレコードになる可能性が常にあります。しかし、すべての結果を1ページに表示することは好ましくありません。したがって、この結果を要件ごとに複数のページに分割できます。
ページングとは、1つの長いページにすべてを配置するのではなく、複数のページにクエリ結果を表示することです。
MySQLは、LIMIT節を使用してページングを生成するのに役立ちます。これには2つの引数があります。最初の引数はOFFSET、2番目の引数はデータベースから返されるレコードの数です。
以下は、LIMIT句を使用してレコードをフェッチしてページングを生成する簡単な例です。
例
<html> <head> <title>Paging Using PHP</title> </head> <body> <?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $rec_limit = 10; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } mysql_select_db('test_db'); /* 全てのレコードを取る */ $sql = "SELECT count(emp_id) FROM employee "; $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not get data: ' . mysql_error()); } $row = mysql_fetch_array($retval, MYSQL_NUM ); $rec_count = $row[0]; if( isset($_GET{'page'} ) ) { $page = $_GET{'page'} + 1; $offset = $rec_limit * $page ; }else { $page = 0; $offset = 0; } $left_rec = $rec_count - ($page * $rec_limit); $sql = "SELECT emp_id, emp_name, emp_salary ". "FROM employee ". "LIMIT $offset, $rec_limit"; $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) { echo "EMP ID :{$row['emp_id']} <br> ". "EMP NAME : {$row['emp_name']} <br> ". EMP SALARY : {$row['emp_salary']} <br> ". "--------------------------------<br>"; } if( $page > 0 ) { $last = $page - 2; echo "<a href = \"$_PHP_SELF?page = $last\">Last 10 Records</a> |"; echo "<a href = \"$_PHP_SELF?page = $page\">Next 10 Records</a>"; }else if( $page == 0 ) { echo "<a href = \"$_PHP_SELF?page = $page\">Next 10 Records</a>"; }else if( $left_rec < $rec_limit ) { $last = $page - 2; echo "<a href = \"$_PHP_SELF?page = $last\">Last 10 Records</a>"; } mysql_close($conn); ?> </body> </html>
MySQLデータベースへのデータの更新 – このセクションでは、PHPを使用して既存のレコードをMySQLデータベースに更新する方法について説明します。
PHP関数mysql_queryを使用してSQL UPDATE文を実行すると、データをMySQLテーブルに更新できます
レコードを従業員テーブルに更新する簡単な例です。任意の表のレコードを更新するには、条件節を使用してレコードを検索する必要があります。以下の例では、プライマリキーを使用して従業員テーブルのレコードを照合しています。
例
次の例を試して、更新操作を理解してください。従業員の給与を更新するには、従業員IDを入力する必要があります。
html> <head> <title>Update a Record in MySQL Database</title> </head> <body> <?php if(isset($_POST['update'])) { $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } $emp_id = $_POST['emp_id']; $emp_salary = $_POST['emp_salary']; $sql = "UPDATE employee ". "SET emp_salary = $emp_salary ". "WHERE emp_id = $emp_id" ; mysql_select_db('test_db'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not update data: ' . mysql_error()); } echo "Updated data successfully\n"; mysql_close($conn); }else { ?> <form method = "post" action = "<?php $_PHP_SELF ?>"> <table width = "400" border =" 0" cellspacing = "1" cellpadding = "2"> <tr> <td width = "100">Employee ID</td> <td><input name = "emp_id" type = "text" id = "emp_id"></td> </tr> <tr> <td width = "100">Employee Salary</td> <td><input name = "emp_salary" type = "text" id = "emp_salary"></td> </tr> <tr> <td width = "100"> </td> <td> </td> </tr> <tr> <td width = "100"> </td> <td> <input name = "update" type = "submit" id = "update" value = "Update"> </td> </tr> </table> </form> <?php } ?> </body> </html>
MySQLデータベースからのデータの削除 – このセクションでは、PHPを使用してMySQLデータベースから既存のレコードを削除または削除する方法について説明します。
PHPのmysql_query関数を使用してSQL DELETE文を実行すると、MySQLテーブルからデータを削除できます。
以下は、レコードを従業員テーブルに削除する簡単な例です。テーブルのレコードを削除するには、条件句を使用してレコードを検索する必要があります。以下の例では、プライマリキーを使用して従業員テーブルのレコードを照合しています。
例
削除操作を理解するには、次の例を試してください。従業員テーブルから従業員レコードを削除するには、従業員IDを指定する必要があります。
<html> <head> <title>Delete a Record from MySQL Database</title> </head> <body> <?php if(isset($_POST['delete'])) { $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } $emp_id = $_POST['emp_id']; $sql = "DELETE FROM employee WHERE emp_id = $emp_id" ; mysql_select_db('test_db'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not delete data: ' . mysql_error()); } echo "Deleted data successfully\n"; mysql_close($conn); }else { ?> <form method = "post" action = "<?php $_PHP_SELF ?>"> <table width = "400" border = "0" cellspacing = "1" cellpadding = "2"> <tr> <td width = "100">Employee ID</td> <td><input name = "emp_id" type = "text" id = "emp_id"></td> </tr> <tr> <td width = "100"> </td> <td> </td> </tr> <tr> <td width = "100"> </td> <td> <input name = "delete" type = "submit" id = "delete" value = "Delete"> </td> </tr> </table> </form> <?php } ?> </body> </html>
PHPを使用してMySQLデータベースをバックアップする – 安全のためにMySQLデータベースのバックアップを取るさまざまな方法を学びます。
常にデータベースの定期的なバックアップをとることをお勧めします。MySQLデータベースのバックアップには、3つの方法があります。
- PHPからSQLコマンドを使用する。
- PHPを介してMySQLバイナリmysqldumpを使用する。
- phpMyAdminユーザーインターフェイスを使用します。
PHPからSQLコマンドを使用する
SQL SELECTコマンドを実行して、任意のテーブルのバックアップを取ることができます。完全なデータベースダンプを取るには、別のテーブルのための別のクエリを書く必要があります。各テーブルは別々のテキストファイルに格納されます。
例
テーブルバックアップの作成にSELECT INTO OUTFILEクエリを使用する例を以下に試してください。
<?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } $table_name = "employee"; $backup_file = "/tmp/employee.sql"; $sql = "SELECT * INTO OUTFILE '$backup_file' FROM $table_name"; mysql_select_db('test_db'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not take data backup: ' . mysql_error()); } echo "Backedup data successfully\n"; mysql_close($conn); ?>
しばらく前にバックアップしたデータを復元する必要がある場合があります。バックアップを復元するには、このようなLOAD DATA INFILEクエリを実行するだけです。
<?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } $table_name = "employee"; $backup_file = "/tmp/employee.sql"; $sql = "LOAD DATA INFILE '$backup_file' INTO TABLE $table_name"; mysql_select_db('test_db'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not load data : ' . mysql_error()); } echo "Loaded data successfully\n"; mysql_close($conn); ?>
PHPバイナリmysqldumpを使用してMySQLバイナリを使用する
MySQLは1つのユーティリティmysqldumpを提供し、データベースバックアップを実行します。このバイナリを使用すると、1つのコマンドで完全なデータベースダンプを取ることができます。
例
以下の例を試して、完全なデータベースダンプを取ってください。
<?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $backup_file = $dbname . date("Y-m-d-H-i-s") . '.gz'; $command = "mysqldump --opt -h $dbhost -u $dbuser -p $dbpass ". "test_db | gzip > $backup_file"; system($command); ?>
phpMyAdminユーザインタフェースの使用
phpMyAdminのユーザーインターフェイスがあれば、非常に簡単にデータベースのバックアップをとることができます。
phpMyAdminを使用してMySQLデータベースをバックアップするには、phpMyAdminメインページの「エクスポート」リンクをクリックします。バックアップするデータベースを選択し、適切なSQLオプションをチェックし、バックアップファイルの名前を入力します。