ホームページ > バックエンド開発 > PHPチュートリアル > phplib の DB クラスの Lineargradientbrush 拡張バージョン

phplib の DB クラスの Lineargradientbrush 拡張バージョン

WBOY
リリース: 2016-07-29 08:37:46
オリジナル
941 人が閲覧しました

コードをコピーします コードは次のとおりです:


/****************************************** ************************************************* * ***********************
独自の開発を容易にし、ADODB や PEAR::DB のような巨大なツールを使用したくない場合は、
それを使用してくださいPHPLib DB クラスに基づいて、シンプルで使いやすく、非常に便利なカプセル化された DB クラスである PEAR::DB クラスを参照してください。
MySQL有效
[ 连接数据库 ]
//包含数据库处理类文件
include_once("database.inc.php");
//本地数据库配置
define("DB_HOST", "localhost"); //数据库服务器
define("DB_USER_NAME", "root"); //数据库用户名
define("DB_USER_PASS", ""); //密码
define("DB_DATABASE", "test"); //数据库
//连接本地数据库
$db = new DB_Sql();
$db->connect(DB_DATABASE, DB_HOST, DB_USER_NAME, DB_USER_PASS);
[ 使用方法 ]
//获取所有记录
$sql = "SELECT * FROM table1";
$all_record = $db->get_all($sql);
//获取一条
$sql = "SELECT * FROM table1 WHERE id = '1'";
$one_row = $db->get_one($sql);
//分页查询,提取20条记录
$sql = "SELECT * FROM table1";
$page_record = $db->limit_query($sql, $start=0, $offset=20, $order="ORDER BY id DESC");
//提取指定数目的记录
$sql = "SELECT * FROM table1";
$limit_record = $db->get_limit($sql,10);
//统计记录数,统计所有类型为学生的
$count = $db->count("table1", "id", "type = 'student'");
//插入一条记录
$info_array = array(
  "name"  => "heiyeluren",
  "type"  => "student",
  "age"  => "22",
  "gender" => "boy"
 );
$db->insert("table1", $info_array);
//更新一条记录
$info_array = array(
  "name"  => "heiyeluren",
  "type"  => "teacher",
  "age"  => "22",
  "gender" => "boy"
 );
$db->update("table1", $info_array, "name = 'heiyeluren'");
//删除记录
$db->delete("table1", "name = 'heiyeluren'");
//执行一条无结果集的SQL
$db->execute("DELETE FROM table1 WHERE name = 'heiyeluren'");
********************************************************************************************************/
/**
 * 文件: database.inc.php
 * 描述: 数据库操作类
 * 说明: 本库使用PHPLib DB库作为核心, 同时增加一些实用方法, 详细参考注释
 */
class DB_Sql 
{
  /* public: connection parameters */
  var $Host     = "";
  var $Database = "";
  var $User     = "";
  var $Password = "";
  /* public: configuration parameters */
  var $Auto_Free     = 1;     ## Set to 1 for automatic mysql_free_result()
  var $Debug         = 0;     ## Set to 1 for debugging messages.
  var $Halt_On_Error = "yes"; ## "yes" (halt with message), "no" (ignore errors quietly), "report" (ignore errror, but spit a warning)
  var $PConnect      = 0;     ## Set to 1 to use persistent database connections
  var $Seq_Table     = "db_sequence";
  /* public: result array and current row number */
  var $Record   = array();
  var $Row;
  /* public: current error number and error text */
  var $Errno    = 0;
  var $Error    = "";
  /* public: this is an api revision, not a CVS revision. */
  var $type     = "mysql";
  //var $revision = "1.2";
  /* private: link and query handles */
  var $Link_ID = 0;
var $Query_ID = 0;
var $locked = false;      ## ロックがある間は true に設定します
/* public: constructor */
function DB_Sql() {
$this->query($query);
}
/* public: いくつかの 簡単な レポート */
function link_id() {
return $this->Link_ID;
}
function query_id() {
return $this->Query_ID;
}
/* public: 接続管理 */
function connect($Database = "", $Host = "", $User = "", $Password = "") {
/* デフォルトの処理 */
if ( "" == $Database)
$Database = $this->データベース;
if ("" == $Host)
$Host = $this->ホスト;
if ("" == $User)
$User = $this->User;
if ("" == $Password)
$Password = $this->パスワード;
/* 接続を確立し、データベースを選択します*/
if ( 0 == $this->Link_ID ) {
if(!$this->PConnect) {
$this->Link_ID = my sql_connect($ホスト, $ユーザー、$パスワード);
} else {
$this->Link_ID = mysql_pconnect($Host, $User, $Password); 
}
if (!$this->Link_ID) {
$this->halt("connect($Host, $User, $Password) が失敗しました。");
0 を返す;
}
if (!@mysql_select_db($Database,$this->Link_ID)) {
$this->halt("データベースを使用できません".$Database);
0 を返す;
}
}
return $this->Link_ID;
}
/* public: クエリ結果を破棄 */
function free() {
@mysql_free_result($this->Query_ID);
$this->Query_ID = 0;
}
/* public: クエリを実行します */
function query($Query_String) {
/* 空のクエリは PHP4 でチョークするため、使用しないでください。 */
if ($Query_String == "")
/* クエリなしでクラスを呼び出す場合、空のクエリ文字列がコンストラクターから渡されます。 状況
* 次のような場合: 「$db = new DB_Sql_Subclass;」
*/
0 を返す;
if (!$this->connect()) {
return 0; /* 私たちはそれについてすでに connect() で苦情を申し立てました。 */
};
# 新しいクエリ、以前の結果は破棄されます。
if ($this->Query_ID) {
$this->free();
}
if ($this->Debug)
printf("Debug: query = %s
n", $Query_String);
$this->Query_ID = @mysql_query($Query_String,$this->Link_ID);
$this->行 = 0;
$this->Errno = mysql_errno();
$this->Error = mysql_error();
if (!$this->Query_ID) {
$this->halt("無効な SQL: ".$Query_String);
}
# 失敗した場合は nada を返します。 それはいいです。
return $this->Query_ID;
}
/* public: walk result set */
function next_record() {
if (!$this->Query_ID) {
$this->halt("保留中のクエリなしで next_record が呼び出されました。");
0 を返す;
}
$this->Record = @mysql_fetch_array($this->Query_ID);
$this->行 += 1;
$this->Errno = mysql_errno();
$this->エラー = mysql_error();
$stat = is_array($this->Record);
if (!$stat && $this->Auto_Free) {
$this->free();
}
$stat を返す;
}
/* public: position in result set */
function seek($pos = 0) {
$status = @mysql_data_seek($this->Query_ID, $pos);
if ($status)
$this->Row = $pos;
else {
$this->halt("seek($pos) が失敗しました: 結果には ".$this->num_rows()." 行があります。");
/* その日を救おうとする中途半端な試みですが、
* ただし、これが文書化されている、または
* 望ましい行動であるとは考えないでください。
*/
@mysql_data_seek($this->Query_ID, $this->num_rows());
$this->Row = $this->num_rows();
0 を返す;
}
1 を返します。
}
/* public: テーブル ロック */
function lock($table, $mode = "write") {
$query = "テーブルをロック ";
if(is_array($table)) {
while(list($key,$value) = each($table)) {
//テキストキーは「read」、「readローカル」、「write」、「low」優先書き込み"
if(is_int($key)) $key = $mode;
if(strpos($value, ",")) {
$query .= str_replace(",", " $key, ", $value) 。 " $key, ";
} else {
$query .= "$value $key, ";
}
}
$query = substr($query, 0, -2);
} elseif(strpos($table, ",")) {
$query .= str_replace(",", " $mode, ", $table) 。 " $モード";
} else {
$query .= "$table $mode";
}
if(!$this->query($query)) {
$this->halt("lock() 失敗しました。");
false を返します。
}
$this->locked = true;
true を返します。
}
function unlock() {
// 潜在的なループを避けるためにロック解除前に設定します
$this->locked = false;
if(!$this->query("unlock tables")) {
$this->halt("unlock() failed.");
false を返します。
}
trueを返します。
}
/* public: 結果 (サイズ, 幅)を評価 */
function affected_rows() {
return @mysql_affected_rows($this->Link_ID);
}
function num_rows() {
return @mysql_num_rows($this->Query_ID);
}
function num_fields() {
return @mysql_num_fields($this->Query_ID);
}
/* public: 短縮表記 */
function nf() {
return $this->num_rows();
}
function np() {
print $this->num_rows();
}
function f($Name) {
if (isset($this->Record[$Name])) {
return $this->Record[$Name];
}
}
function p($Name) {
if (isset($this->Record[$Name])) {
print $this->Record[$Name];
}
}
/* public: シーケンス番号 */
function nextid($seq_name) {
/* 現在のロックがない場合、ロック シーケンス テーブル */
if(!$this->locked) { if($ this->lock($this->Seq_Table)) {
$locked = true;
} else {
$this->halt("ロックできません".$this->Seq_Table." - 作成されましたか?");
0 を返す;
}
}
/* get sequence number and increment */
$q = sprintf("select nextid from %s where seq_name = '%s'"
$this->Se q_Table、
$seq_name);
if(!$this->query($q)) {
$this->halt('nextid でクエリが失敗しました: '.$q);
0 を返す;
}
/* 現在の値がないため、値を作成します*/
if(!$this->next_record()) {
$currentid = 0;
$q = sprintf("insert into %s values('%s', %s)",
$this->Seq_Table,
$seq_name,
$currentid);
if(!$this->query($q)) {
$this->halt('nextid: '.$q); でクエリが失敗しました。
0 を返す;
}
} else {
$currentid = $this->f("nextid");
}
$nextid = $currentid + 1;
$q = sprintf("update %s set nextid = '%s' where seq_name = '%s'",
$this->Seq_Table,
$nextid, $seq_name);
if(!$this->query($q)) {
$this->halt('nextid でクエリが失敗しました: '.$q);
0 を返す;
}
/* nextid() がシーケンス テーブルをロックしている場合は、ロックを解除します */
if($locked) {
$this->unlock();
}
$nextid を返す;
}
/* public: return table metadata */
function metadata($table = "", $full = false) {
$count = 0;
$id = 0;
$res = array();
/*
* Table との互換性の問題により、 metadata(); の動作
* が変更されました。
* $full に応じて、メタデータは次の 値を返します:
*
* - full は false (デフォルト):
* $result[]:
* [0]["table"] テーブル名
* [0][ "name"] フィールド名
* [0]["type"] フィールドタイプ
* [0]["len"] フィールド長
* [0]["flags"] フィールドフラグ
*
* - fullそれは本当です
* $result[]:
* ["num_fields"] メタデータ レコードの数
* [0]["table"] テーブル名
* [0]["name"] フィールド名
* [0 ]["タイプ"] フィールド タイプ
* [0]["len"] フィールド長
* [0]["flags"] フィールド フラグ
* ["メタ"][フィールド名] 「フィールド名」という名前のフィールドのインデックス
* これ最後のフィールドは、フィールド名はあるがインデックスがない場合に使用できます。
* テスト: if (isset($result['meta']['myfield'])) { ...
*/
//$table が指定されていない場合は、クエリを処理していると仮定します
// result
if ($table) {
$this->connect();
$id = @mysql_list_fields($this->Database, $table);
if (!$id) {
$this->halt("メタデータクエリが失敗しました。");
false を返します。
}
} else {
$id = $this->Query_ID; 
if (!$id) {
$this->halt("クエリが指定されていません。");
false を返します。
}
}
$count = @mysql_num_fields($id);
// パフォーマンスを考慮してこの IF を作成しました(1 つの if は $count if よりも高速です)
if (!$full) {
for ($i=0; $i<$count; $i++) {
$res[$ i]["テーブル"] = @mysql_field_table ($id, $i);
$res[$i]["name"] = @mysql_field_name ($id, $i);
$res[$i]["type"] = @mysql_field_type ($id, $i);
$res[$i]["len"] = @mysql_field_len ($id, $i);
$res[$i]["flags"] = @mysql_field_flags ($id, $i);
}
} else { // full
$res["num_fields"]= $count;
for ($i=0; $i<$count; $i++) {
$res[$i]["table"] = @mysql_field_table ($id, $i);
$res[$i]["name"] = @mysql_field_name ($id, $i);
$res[$i]["type"] = @mysql_field_type ($id, $i);
$res[$i]["len"] = @mysql_field_len ($id, $i);
$res[$i]["flags"] = @mysql_field_flags ($id, $i);
$res["メタ"][$res[$i]["名前"]] = $i;
}
}
// テーブルで呼び出された場合にのみ結果を解放します
if ($table) {
@mysql_free_result($id);
}
$res を返す;
}
/* public: 利用可能なテーブル名を検索 */
function table_names() {
$this->connect();
$h = @mysql_query("show tables", $this->Link_ID);
$i = 0;
while ($info = @mysql_fetch_row($h)) {
$return[$i]["table_name"] = $info[0];
$return[$i]["tablespace_name"] = $this->データベース;
$return[$i]["データベース"] = $this->データベース;
$i++;
}
@mysql_free_result($h);
return $return;
}
/* private: エラー処理 */
function halt($msg) {
$this->Error = @mysql_error($this->Link_ID);
$this->Errno = @mysql_errno($this->Link_ID);
if ($this->locked) {
$this->unlock();
}
if ($this->Halt_On_Error == "no")
return;
$this->haltmsg($msg);
if ($this->Halt_On_Error != "レポート")
die("セッションが停止されました。");
}
function haltmsg($msg) {
printf("データベース エラー: %s
n", $msg) T Printf ("& lt; b & gt; mysql エラー & lt;/b & gt ;:%s (%s) & lt; br & gt; n",
$ this- & gt; errno,
$ this - & gt; エラー); //---------------------------------
// モジュール: カスタム関数
// 機能: パート 実践的なデータベース処理方法
// 著者: heiyeluren
// 時間: 2005-12-26
//--------------------- ----- --------
/**
* メソッド:execute($sql)
* 機能: SQL ステートメントを実行します。主に結果セットを返さない SQL です。
* パラメーター: $sql 実行する必要がある SQL ステートメント。例:execute("DELETE FROM table1 WHERE id = ' 1'")
* 戻り値: 更新が成功した場合は True、更新が失敗した場合は False
*/
functionexecute($sql)
{
if (empty($sql))
{
$this->error( "無効なパラメータ") ;
}
if (!$this->query($sql))
{
return false; }
return true;
/**
* メソッド: get_all($sql)
* 関数: SQL 実行のすべてのレコードを取得する
* パラメーター: $sql 実行する必要がある SQL、例: get_all("SELECT * FROM Table1")
* 戻り値: Returnsすべてのクエリ結果
の 2 次元配列*/
function get_all( $sql)
{
$this->query($sql);
$result_array = array();
while($this->next_record())
{
$result_array[] = $this->レコード;
}
if (count($result_array)<=0)
{
return 0; }
return $result_array;
/**
* メソッド: get_one($sql)
* 関数: SQL 実行の記録を取得します
* パラメーター: $sql 実行する必要がある SQL、例: get_one("SELECT * FROM Table1 WHERE id = '1'" )
* Return : クエリ結果を含む 1 次元配列を返します
*/
function get_one($sql)
{
$this-& gt ;query($sql);
if (!$this->next_record())
{
return 0;
}
/**
* メソッド: get_limit($sql, $limit)
* 関数: SQL 実行のために指定されたレコード数を取得します
* パラメーター:
* $sql 実行する必要がある SQL、例: SELECT * FROM Table1
* $limit レコード数を制限する必要があります
* たとえば、10 レコードを取得する必要がある場合、 get_limit("SELECT * FROM Table1", 10); 戻り値: すべてのクエリ結果を含む 2 次元配列を返します。
*/
function get_limit($sql, $limit)
{
$this->query($sql);
$result_array = array()
for ($i=0; $i<$limit&$ this->next_record( ); $i++)
{
$result_array[] = $this->Record
}
if (count($result_array) <= 0)
{
return 0; $結果配列を返す
}
/**
* メソッド: limit_query($sql, $start=0, $offset=20, $order="")
* 関数: ページング用の SQL 実行用に指定されたレコード数を取得します
* パラメーター:
* $sql は実行される SQL、例: SELECT * FROM Table1
* $start レコードの開始番号、デフォルトは 0
* $offset レコードのオフセット、デフォルトは 20
* $order ソート方法、デフォルトは空です。例: ORDER BY id DESC
* たとえば、0 から 10 までのレコードを取得し、ID 番号で並べ替える必要がある場合、get_limit("SELECT * FROM Table1", 0, 10, "ORDER BY id DESC ");
*
* Return: すべてのクエリ結果を含む 2 次元配列を返します
*/
function limit_query($sql, $start=0, $offset=20, $order="")
{
$sql = $sql ." $order LIMIT $start,$offset ";
$this->クエリ($sql);
$result = array();
while($this->next_record())
{
$result[] = $this->Record;
}
if (count($result) <=0 )
{
return 0;
}
$result を返す;
}
/**
* メソッド: count($table,$field="*", $where="")
* 関数: 統計テーブル内のデータの総数
* パラメーター:
* $table 必要なテーブルの名前統計
* $field には統計フィールドが必要です。デフォルトは *
* $where 条件ステートメント、デフォルトは空です
* たとえば、ID に従って 20 歳未満のすべてのユーザーをカウントします。 count("user_table", "id") , "user_age < 20")
*
* 戻り値: 統計結果の数を返します
*/
function count($table,$field="*", $where="")
{
$sql = (empty($where) ? "SELECT COUNT($field ) FROM $table" : "SELECT COUNT($field) FROM $table WHERE $where");
$result = $this->get_one($sql);
if (!is_array($result))
{
return 0;
}
return $result[0];
}
/**
* メソッド: insert($table,$dataArray)
* 関数: テーブルにレコードを挿入します
* パラメーター:
* $table 挿入するテーブルの名前
* $dataArray フィールドと値の配列挿入する場合、キーはフィールド名、値はフィールド値です。例: array("user_name"=>"Zhang San", "user_age"=>"20 years old"); * 例, たとえば、ユーザー Zhang San を挿入、年齢は 20、insert(" users", array("user_name"=>"Zhang San", "user_age"=>"20 歳"))
*
* 戻り値: レコードの挿入が成功した場合は True が返され、失敗した場合は False が返されます
*/
function insert($table,$dataArray)
{
if (!is_array($dataArray) || count($dataArray)<=0)
{
$this- >error("無効なパラメータ");
}
while(list($key,$val) = each($dataArray))
{
$field .= "$key,";
$value .= "'$val',";
}
$field = substr($field, 0, -1);
$value = substr($value, 0, -1);
$sql = "$table ($field) VALUES ($value)に挿入します";
if (!$this->query($sql))
{
return false;
}
trueを返します。
}
/**
* メソッド: update($talbe, $dataArray, $where)
* 関数: レコードを更新する
* パラメーター:
* $table 更新する必要があるテーブルの名前
* $dataArray フィールドと値の配列更新する必要があるものは、キーはフィールド名、値はフィールド値です。例: array("user_name"=>"Zhang San", "user_age"=>"20 years old");
* $where 条件文
* たとえば、Zhang San の名前を更新します。 ユーザーは Li Si、年齢は 21 です
* * update("users", array("user_name"=>"Zhang San", "user_age"=>"20 歳"), "user_name='Zhang San'")
*
* 戻り値: 更新が成功した場合は True、更新が失敗した場合は False
*/
function update($talbe, $dataArray, $where)
{
if (!is_array($dataArray) || count($dataArray)<=0)
{
$this ->error("無効なパラメータ");
}
while(list($key,$val) = each($dataArray))
{
$value .= "$key = '$val',";
}
$value = substr($value, 0, -1);
$sql = "UPDATE $talbe SET $value WHERE $where";
if (!$this->query($sql))
{
return false;
}
trueを返します。
}
/**
* メソッド: delete($table, $where)
* 関数: レコードを削除する
* パラメーター:
* $table レコードを削除する必要があるテーブルの名前
* $where レコードを削除する必要がある条件文レコード
* たとえば、Zhang San という名前のユーザーを削除する場合、delete("users", "user_name='Zhang San'")
*
* 戻り値: 更新が成功した場合は True、更新が成功した場合は Falseアップデートに失敗します
*/
function delete($table, $where)
{
if (empty($where))
{
$this->error("無効なパラメータ");
}
$sql = "$table WHERE $where から削除します";
if (!$this->query($sql))
{
return false;
}
trueを返します。
}
/**
* メソッド: error($msg="")
* 機能: エラーメッセージを表示した後、スクリプトを中止します
* パラメータ: $msg 表示するエラーメッセージ
* 戻り値: ノーリターン
*/
関数 error($msg="")
{
echo "エラー: $msgn
n";
exit();
}
/**
*メソッド: get_insert_id()
*関数: 最後に挿入されたIDを取得します
*パラメータ: パラメータなし
*戻り値: 成功した場合はIDを返し、それ以外の場合は0を返します
*/
function get_insert_id()
{
return mysql_insert_id($this->Link_ID);
}
/**
* メソッド: close()
* 関数: 現在のデータベース接続を閉じる
* パラメータ: パラメータなし
* 戻り値: 成功した場合は true、失敗した場合は false を返す
*/
function close()
{
return mysql_close($this->Link_ID);
}
}
?>

以上は、lineargradientbrush の追加版 phplib の DB クラスであり、lineargradientbrush に関する内容が含まれており、PHP 教則に関心のある友人の助けになることを望みます。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート