目次 †
内容 †
PHPコンパイル時の注意 †
php.iniの編集 †
- 場所は/etc/php.in もしくは /usr/local/php.ini など
extension=mysql.so
mysqlへの接続を簡単に抽象化 †
- こんなの書かずにDoctrineでも使え、という声もある。
<?php
// 接続
define( 'DB_HOST', 'localhost' );
define( 'DB_USER', 'username' );
define( 'DB_PASS', 'passwd' );
define( 'DB_SCHEMA', 'schema' );
// 接続
$db = _db_connect( DB_HOST, DB_USER, DB_PASS, DB_SCHEMA );
// 例1)データを全部取得
$recs = array();
$query = _db_query_select( $db, "tablename", "all", "order by id" );
while( $row = _db_fetch_assoc( $query ) ){
$recs[] = $row;
}
// 例2)データの挿入(数値型と文字型を分けて指定する)
_db_insert( $db, "tablename",
array(
"int_field1" => 123,
"int_field2" => 456
),
array(
"str_field1" => "string1",
"str_field2" => "string2"
)
);
// 切断
_db_close( $db );
//=====================================================================
// 抽象化した関数群
//=====================================================================
/* [関数名] _db_connect
* [機 能] MySQLに接続する
* [引 数]
* @param string $host 接続するデータベースのホスト名
* @param string $user 接続するデータベースのユーザー名
* @param string $pass 接続するデータベースのパスワード
* @param string $schema 接続するデータベースのスキーマ名
* [返り値]
* @return object $db データベース接続のオブジェクトを返す
*/
function _db_connect( $host, $user, $pass, $schema ){
$db = mysqli_connect( $host, $user, $pass );
if( ! $db ){
_db_error( "DB Connection Failure", mysqli_error($db), $table );
}
if( ! mysqli_select_db( $db, $schema ) ){
_db_error( "DB Schema Connection Error", mysqli_error($db), $table );
}
return $db;
}
/* [関数名] _db_close
* [機 能] MySQLに接続する
* [引 数]
* @param object $db データベースのオブジェクト
* [返り値]
* 特になし
*/
function _db_close( $db ){
mysqli_close( $db );
}
/* [関数名] _db_query_select
* [機 能] MySQLでselectを実行
* [引 数]
* @param object $db データベースのオブジェクト
* @param string $table テーブル名
* @param array $fields 出力するフィールド名、配列以外を指定した場合は全フィールドを出力
* @param array $options SQLクエリーのオプションを格納した配列
* @param bool $debug 実行するSQL文のデバッグ出力
* [返り値]
* @return object $query 成功した場合はDBの結果クエリーを返す
*/
function _db_query_select( $db, $table, $fields, $options = null, $debug = null ){
$fields = ( is_array( $fields ) ) ? implode( ",", $fields ) : '*';
$sql = "select $fields from $table " . ( is_array( $options ) ? implode( " ", $options ) : $options );
if( $debug ){
echo $sql . "\n";
}
$query = mysqli_query( $db, $sql );
if( ! $query ){
_db_error( "DB Query Error", mysqli_error($db), $table );
}
return $query;
}
/* [関数名] _db_fetch_assoc
* [機 能] selectの結果を連想配列で取得
* [引 数]
* @param object $query SQLクエリーのオブジェクト
* [返り値]
* @return array $query select実行結果の連想配列
*/
function _db_fetch_assoc( $query ){
return mysqli_fetch_assoc( $query );
}
/* [関数名] _db_fetch_array
* [機 能] selectの結果を配列で取得
* [引 数]
* @param object $query SQLクエリーのオブジェクト
* [返り値]
* @return array $query select実行結果の配列(数字添字とフィールド名)
*/
function _db_fetch_array( $query ){
return mysqli_fetch_array( $query );
}
/* [関数名] _db_fetch_row
* [機 能] selectの結果を配列で取得
* [引 数]
* @param object $query SQLクエリーのオブジェクト
* [返り値]
* @return array $query select実行結果の数値添字の配列
*/
function _db_fetch_row( $query ){
return mysqli_fetch_row( $query );
}
/* [関数名] _db_insert
* [機 能] MySQLでinsertを実行
* [引 数]
* @param object $db データベースのオブジェクト
* @param string $table テーブル名
* @param array $int 数値型のデータ配列(「"フィールド名" => 値」で指定)
* @param array $str 文字型のデータ配列(「"フィールド名" => '値'」で指定)
* @param bool $debug 実行するSQL文のデバッグ出力
* [返り値]
* @return bool $query 成功した場合はtrueを返す
*/
function _db_insert( $db, $table, $int, $str, $debug = null ){
$fields = array();
$values = array();
// 数値型
foreach ( $int as $key => $value ){
if( ! is_numeric( $value ) ){
_db_error( "Wrong Data Type", "atteppt to set '$value' at int field '$key'", $table );
}
$fields[] = $key;
$values[] = $value;
}
// 文字型
foreach ( $str as $key => $value ){
$fields[] = $key;
$values[] = "'" . mysqli_real_escape_string( $db, $value ) . "'";
}
// SQL文字列の生成
$sql = sprintf( 'insert into %s (%s) values (%s);', $table, implode( ",", $fields ), implode( ",", $values ) );
if( $debug ){
echo $sql ."\n";
}
// SQLの実行
$query = mysqli_query( $db, $sql );
if( ! $query ){
_db_error( "DB Query Error", mysqli_error($db), $table );
}
return $query;
}
/* [関数名] _db_delete
* [機 能] MySQLでdeleteを実行
* [引 数]
* @param object $db データベースのオブジェクト
* @param string $table テーブル名
* @param array $options SQLクエリーのオプションを格納した配列
* @param bool $debug 実行するSQL文のデバッグ出力
* [返り値]
* @return bool $query 成功した場合はtrueを返す
*/
function _db_delete( $db, $table, $options = null, $debug = null ){
$sql = "delete from $table " . ( is_array( $options ) ? implode( " ", $options ) : $options );
if( $debug ){
echo $sql . "\n";
}
$query = mysqli_query( $db, $sql );
if( ! $query ){
_db_error( "DB Delete Error", mysqli_error($db), $table );
}
return $query;
}
/* [関数名] _db_num_row
* [機 能] selectの件数をカウント
* [引 数]
* @param object $query SQLクエリーのオブジェクト
* [返り値]
* @return array $count 結果セットの件数
*/
function _db_num_row( $query ){
return mysqli_num_rows( $query );
}
/* [関数名] _db_autocommit
* [機 能] autocommitの設定
* [引 数]
* @param object $db データベースのオブジェクト
* @param bool $mode 自動コミットの有効・無効
* [返り値]
* @return buol $result 成功した場合にTRUEを、失敗した場合にFALSEを返す
*/
function _db_autocommit( $db, $mode ){
return mysqli_autocommit ( $db, $mode );
}
/* [関数名] _db_commit
* [機 能] commitの実行
* [引 数]
* @param object $db データベースのオブジェクト
* [返り値]
* @return bool $result 成功した場合にTRUEを、失敗した場合にFALSEを返す
*/
function _db_commit( $db ){
return mysqli_commit($db);
}
/* [関数名] _db_insert_id
* [機 能] AUTO_INCREMENT属性を持つカラムがあるテーブル上でのクエリにより生成されたIDを返す
* [引 数]
* @param object $db データベースのオブジェクト
* [返り値]
* @return int $id 直前のクエリで更新されたAUTO_INCREMENTフィールドの値
*/
function _db_insert_id($db){
return mysqli_insert_id($db);
}
/* [関数名] _db_escape_string
* [機 能] SQL文中で使用できる正当な形式のSQL文字列を作成
* [引 数]
* @param object $db データベースのオブジェクト
* @param string $value 変換する文字列
* [返り値]
* @return int $result エスケープ済みの文字列を返します。
*/
function _db_escape_string( $db, $value ){
return mysqli_real_escape_string( $db, $value );
}
/* [関数名] _db_error
* [機 能] DBで発生したエラーをecho出力
* [引 数]
* @param string $title エラーのタイトル
* @param string $msg エラーの説明文
* @param string $table エラーが発生したテーブル名
* [返り値]
* 特になし
*/
function _db_error( $title, $msg, $table ){
echo( "[$title] " . $msg . " at table \"$table\"\n" );
}
MySQLに直接接続するスクリプト †
- 古い方式
<HTML>
<BODY>
<?PHP
### DB設定
$dbUser = "username";
$dbPass = "******";
$dbHost = "localhost";
$dbName = "dbname";
### 処理開始
$con = mysql_connect($dbHost,$dbUser,$dbPass) || print "接続できません";
print "接続に成功しました";
mysql_close($con);
?>
</BODY>
</HTML>
PEAR::DBを使って接続 †
|