Web Memo/Pear_DB
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
*Pearでデータベース(DB) [#v3c4d5a8]
RIGHT:更新日&lastmod();
**MySQLへの接続 [#adc621eb]
PEAR::DBを利用するには
DBのクラスがインストールされていることない場合はインスト...
以下で確認
$ pear list
Installed packages, channel pear.php.net:
=========================================
Package Version State
Archive_Tar 1.3.2 stable
Auth 1.6.1 stable
(略)
Crypt_CHAP 1.0.1 stable
DB 1.7.13 stable <==これがあること
File_Passwd 1.1.6 stable
HTTP_Client 1.1.1 stable
HTTP_Request 1.4.2 stable
''インストール''
# pear install --alldeps DB
***DBへの接続 [#t22cee89]
//PEARのクラスライブラリをインクルード
require_once("DB.php");
$dsn = array(
"phptype" => "mysqli", <==MySQLを指定
"username" => "ism", <==MySQLのユーザ名
"password" => "****", <==MySQLパスワード
"hostspec" => "192.168.30.16",<==MySQLのHost(IP or H...
"database" => "db_test1"); <==接続DB名
$option = array(
"autofree" => TRUE,
"debug" => 1,
"portability" => DB_PORTABILITY_ALL);
$db = DB::connect($dsn, $option);
if(DB::isError($db)){
die("接続失敗 : " . $db->getMessage() ."\n");
}
print("接続成功 \n");
$db->disconnect();
?>
''接続可能なDB名(phptype)''~
|phptype|DB名|
|mysql|MySQL 4.0以前|
|mysqli|MySQL 4.1以降(PHP5が必要)|
|oci8|Oracle7/8/9|
|odbc|ODBC|
|pgsql|PostgreSQL|
|sybase|Sybase|
''オプション''~
autofree(false): trueでは読み込み可能な行がなくなった時...
debug(0): 0-3で指定し大きいほうが詳細情報を出力する
portability(DB_PORTABILITY_NONE): DBの種類による差を吸収...
DB_PORTABILITY_ALLで最大限吸収する。詳細は別途検討する。
''接続エラー''
以下のエラーが出た場合phpでMySQL関数が使用できないような...
DB Error: extension not found
***DBのデータ読み取り [#fc62abef]
''SQLを発行して連想配列に取得''
$result = $db->query("select * from t_test");
//エラー処理
if(DB::isError($result)){
die("エラーメッセージ". $result->getMessage() . " /...
$result->getCode() . "\n");
}
// 連想配列に指定 : DB_FETCHMODE_ASSOC
print "連想配列 \n";
while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC)){
printf("%s %s %s \n", $row['no'], $row['data...
mb_convert_encoding($row['data3'],"EUC-JP","UTF-8"));
}
''SQLを発行してオブジェクトに取得''
$result = $db->query("select * from t_test");
// オブジェクトに指定 : DB_FETCHMODE_OBJECT
print "オブジェクト \n";
while ($row = $result->fetchRow(DB_FETCHMODE_OBJECT)){
printf("%s %s %s \n", $row->no, $row->data2,...
($row->data3, "EUC-JP","UTF-8"));
}
''SQL発行してレコード数、フィールド数の取得''
$result = $db->query("select * from t_test");
//レコード数の取得
$num = $result->numRows();
printf("取得レコード数 %d \n",$num);
//フィールド数の取得
$num = $result->numCols();
printf("取得フィールド数 %d \n",$num);
''$db->queryでは配列で指定した場所(?)に代入することができ...
これにより、SQLインジェクション対策になるかも
// プレイスホルダ
$result = $db->query("select * from t_test where no=?", ...
while ($row = $result->fetchRow(DB_FETCHMODE_OBJECT)){
printf("%s %s %s \n", $row->no, $row->data2,...
($row->data3,"EUC-JP","UTF-8"));
}
&color(red){MySQLでは「--」はコメントになる。SQLインジェ...
''SQLインジェクションの例''
idとパスワードを入れる例としてidの部分に 「'' or 'a'='a';...
passは 空白でSQLは以下のようになる。
select * from t_member where id ='' or 'a'='a';-- and pa...
''テーブル参照エラー処理''
// エラー処理
$result = $db->query("select * from t_test2");
if(DB::isError($result)){
die("エラーメッセージ". $result->getMessage() . " /...
$result->getCode() . "\n");
}
***DBへの書き込み [#ye43056b]
プレイスホルダを利用したインサート
$write_data = array(
3,
18,
mb_convert_encoding("静岡", "UTF-8", "EUC-JP"));
$result = $db->query("insert into t_test(no, data2, data...
$write_data);
if(DB::isError($result)){
die("エラーメッセージ". $result->getMessage() . " /...
$result->getCode() . "\n");
}
**PostgreSQLへの接続 [#x41e2433]
接続時、phptypeをpgsqlに変更するだけでMySQLと同じように利...
***DBへの接続 [#fe5188a3]
<?php
// DBはPostgreSQL LocalHost
require_once("DB.php");
$dsn = array(
"phptype" => "pgsql",
"username" => "okada",
"password" => "****",
"hostspec" => "localhost",
"database" => "db_test1");
$option = array(
"autofree" => TRUE,
"debug" => 1,
"portability" => DB_PORTABILITY_ALL);
$db = DB::connect($dsn, $option);
if(DB::isError($db)){
die("接続失敗 : " . $db->getMessage() ."\n");
}
print("接続成功 \n");
$db->disconnect();
?>
終了行:
*Pearでデータベース(DB) [#v3c4d5a8]
RIGHT:更新日&lastmod();
**MySQLへの接続 [#adc621eb]
PEAR::DBを利用するには
DBのクラスがインストールされていることない場合はインスト...
以下で確認
$ pear list
Installed packages, channel pear.php.net:
=========================================
Package Version State
Archive_Tar 1.3.2 stable
Auth 1.6.1 stable
(略)
Crypt_CHAP 1.0.1 stable
DB 1.7.13 stable <==これがあること
File_Passwd 1.1.6 stable
HTTP_Client 1.1.1 stable
HTTP_Request 1.4.2 stable
''インストール''
# pear install --alldeps DB
***DBへの接続 [#t22cee89]
//PEARのクラスライブラリをインクルード
require_once("DB.php");
$dsn = array(
"phptype" => "mysqli", <==MySQLを指定
"username" => "ism", <==MySQLのユーザ名
"password" => "****", <==MySQLパスワード
"hostspec" => "192.168.30.16",<==MySQLのHost(IP or H...
"database" => "db_test1"); <==接続DB名
$option = array(
"autofree" => TRUE,
"debug" => 1,
"portability" => DB_PORTABILITY_ALL);
$db = DB::connect($dsn, $option);
if(DB::isError($db)){
die("接続失敗 : " . $db->getMessage() ."\n");
}
print("接続成功 \n");
$db->disconnect();
?>
''接続可能なDB名(phptype)''~
|phptype|DB名|
|mysql|MySQL 4.0以前|
|mysqli|MySQL 4.1以降(PHP5が必要)|
|oci8|Oracle7/8/9|
|odbc|ODBC|
|pgsql|PostgreSQL|
|sybase|Sybase|
''オプション''~
autofree(false): trueでは読み込み可能な行がなくなった時...
debug(0): 0-3で指定し大きいほうが詳細情報を出力する
portability(DB_PORTABILITY_NONE): DBの種類による差を吸収...
DB_PORTABILITY_ALLで最大限吸収する。詳細は別途検討する。
''接続エラー''
以下のエラーが出た場合phpでMySQL関数が使用できないような...
DB Error: extension not found
***DBのデータ読み取り [#fc62abef]
''SQLを発行して連想配列に取得''
$result = $db->query("select * from t_test");
//エラー処理
if(DB::isError($result)){
die("エラーメッセージ". $result->getMessage() . " /...
$result->getCode() . "\n");
}
// 連想配列に指定 : DB_FETCHMODE_ASSOC
print "連想配列 \n";
while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC)){
printf("%s %s %s \n", $row['no'], $row['data...
mb_convert_encoding($row['data3'],"EUC-JP","UTF-8"));
}
''SQLを発行してオブジェクトに取得''
$result = $db->query("select * from t_test");
// オブジェクトに指定 : DB_FETCHMODE_OBJECT
print "オブジェクト \n";
while ($row = $result->fetchRow(DB_FETCHMODE_OBJECT)){
printf("%s %s %s \n", $row->no, $row->data2,...
($row->data3, "EUC-JP","UTF-8"));
}
''SQL発行してレコード数、フィールド数の取得''
$result = $db->query("select * from t_test");
//レコード数の取得
$num = $result->numRows();
printf("取得レコード数 %d \n",$num);
//フィールド数の取得
$num = $result->numCols();
printf("取得フィールド数 %d \n",$num);
''$db->queryでは配列で指定した場所(?)に代入することができ...
これにより、SQLインジェクション対策になるかも
// プレイスホルダ
$result = $db->query("select * from t_test where no=?", ...
while ($row = $result->fetchRow(DB_FETCHMODE_OBJECT)){
printf("%s %s %s \n", $row->no, $row->data2,...
($row->data3,"EUC-JP","UTF-8"));
}
&color(red){MySQLでは「--」はコメントになる。SQLインジェ...
''SQLインジェクションの例''
idとパスワードを入れる例としてidの部分に 「'' or 'a'='a';...
passは 空白でSQLは以下のようになる。
select * from t_member where id ='' or 'a'='a';-- and pa...
''テーブル参照エラー処理''
// エラー処理
$result = $db->query("select * from t_test2");
if(DB::isError($result)){
die("エラーメッセージ". $result->getMessage() . " /...
$result->getCode() . "\n");
}
***DBへの書き込み [#ye43056b]
プレイスホルダを利用したインサート
$write_data = array(
3,
18,
mb_convert_encoding("静岡", "UTF-8", "EUC-JP"));
$result = $db->query("insert into t_test(no, data2, data...
$write_data);
if(DB::isError($result)){
die("エラーメッセージ". $result->getMessage() . " /...
$result->getCode() . "\n");
}
**PostgreSQLへの接続 [#x41e2433]
接続時、phptypeをpgsqlに変更するだけでMySQLと同じように利...
***DBへの接続 [#fe5188a3]
<?php
// DBはPostgreSQL LocalHost
require_once("DB.php");
$dsn = array(
"phptype" => "pgsql",
"username" => "okada",
"password" => "****",
"hostspec" => "localhost",
"database" => "db_test1");
$option = array(
"autofree" => TRUE,
"debug" => 1,
"portability" => DB_PORTABILITY_ALL);
$db = DB::connect($dsn, $option);
if(DB::isError($db)){
die("接続失敗 : " . $db->getMessage() ."\n");
}
print("接続成功 \n");
$db->disconnect();
?>
ページ名: