PHP操作mysqli(サンプルコード)_PHPチュートリアル

WBOY
リリース: 2016-07-13 10:25:49
オリジナル
836 人が閲覧しました

define("MYSQL_OPEN_LOGS",true);
クラス mysqliHelp
{

private $db;

public function __construct()
{
//如果要查询日志log的话,怎么办

}

public function __get($name )
{
//echo " __GET:",$name;
if(in_array($name,array("db"),true))//またはisset($this->$name)
return $this->$name;
null を返します。

}
public function connect($host,$user,$pass,$db,$charSet='utf8',$force=false)
{

if($this->db && ($this->gt ;db インスタンス of mysqli) && !$force)
{
return ;
}
$this->db=new mysqli($host,$user,$pass,$db);
if (mysqli_connect_error()) {
die('接続エラー (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
$this->db->set_charset($charSet);



}




//$dbname string
// 成功した場合は TRUE を返し、失敗した場合は FALSE を返します。
function select_db ($dbname )
{
return $this->db-> ;select_db($dbname); 
}

//$query mysqli_result
//$resulttype int MYSQLI_ASSOC、MYSQLI_NUM、または MYSQLI_BOTH。デフォルトは MYSQLI_BOTH です。
// 戻り值 フェッチされた行に対応する文字列の配列を返します。結果セットに行が存在しない場合は NULL を返します。   
function fetch_array(/*mysqli_result*/ $query, $resulttype = MYSQLI_ASSOC)
{
//var_dump(!null);
if(!$query || !($query instanceof mysqli_result))
return NULL;
return $query->fetch_array($resulttype);//
}

function data_seek($result,$offset)
{

return $result->data_seek($offset);

}



function fetch_assoc($query)
{

return $query->fetch_assoc();// 关联数组
}

function fetch_row($query)
{
return $query-> fetch_row();// インデックス数組、数字0,1。例。。
}

function fetch_fields($query)
{
return $query->fetch_fields();
}

//$query string
//$resultmode int
// 成功した場合は TRUE を返し、失敗した場合は FALSE を返します。SELECT、SHOW、DESCRIBE、または EXPLAIN の場合、mysqli_query() は結果オブジェクトを返します。 
public function query($sql ,$resultmode=MYSQLI_STORE_RESULT )
{
if(MYSQL_OPEN_LOGS) {

$sqlstarttime = $sqlendttime = 0;

$mtime =explode(' ', microtime());
$sqlstarttime = $mtime[1]+ $mtime[0] ;


}

//真正查询
$query=$this->db->query($sql,$resultmode);

if(MYSQL_OPEN_LOGS) {
// sleep(1);
$mtime =explode(' ', microtime());
$sqlendttime = $mtime[1] + $mtime[0] ;
$sqlQueryTime =number_format($sqlendttime - $sqlstarttime,6);
//dblogs($sql, $sqlQueryTime,1);
$explain = array();
$info = $this->db->info;
if($query && preg_match("/^(select )/i", $sql)) {
$explain = $this->fetch_array($this->db->query('EXPLAIN '.$ SQL)、MYSQLI_ASSOC );
}
$GLOBALS['mysql_debug_query'][] = array('sql'=>$sql, 'time'=>$sqlQueryTime, 'info'=>$info, 'explain'=>$explain );
}


if(!$query)
{
$this->halt('MySQL Query Error', $sql);
}


return $query;

}

// 戻り値 mysqli_stmt对象
function prepare($sql)
{
return $this->db->prepare($sql);

}

functionaffected_rows() {


return $this->db->affected_rows;
}
関数 error()
{
return $this->db->e​​rror;

}
関数 errno()
{
return $this->db->e​​rrno;
}
//結果はありません

function num_rows($query)
{
return $query->num_rows;

}

//返值 int 結果セットからのフィールドの数。 
//別の方法で mysqliHelp->db->field_count を返すこともできます。
    function num_fields($query)
    {
        return  $query->field_count;
    }

    function free_result($query)
    {
        //all methods are equivalent;
        $query->free();
        //$query->free_result();
        //$query->close();
    }

    function insert_id() 
    {

         if(($id = $this->db->insert_id)>= 0)
         {

            return $id;
         }else
         {
            $idArr=$this->fetch_array($this->query("SELECT last_insert_id() as id"));
            return  intval($idArr[0]);
         }

         
        //return ($idArr=$this->fetch_array($this->query("SELECT last_insert_id() as id")))[0]
        //return ($id = $this->db-insert_id)>= 0 ? $id : 0 ;
    }

    function close() {

        return $this->db->close();
    }

     
    function halt($message,$sql)
    {
        $dberror = $this->error();
        $dberrno = $this->errno();
        $help_link = "http://faq.comsenz.com/?type=mysql&dberrno=".rawurlencode($dberrno)."&dberror=".rawurlencode($dberror);
        echo "


                MySQL Error

                Message: $message

                SQL: $sql

                Error: $dberror

                Errno.: $dberrno

                Click here to seek help.
               
";
プロパティ
$ mysqli-> pheprected_rows mysqli_affted_rows()n/a前のmysql操作の影響を受けた列の数を取得します。 $mysqli->connect_errno mysqli_connect_errno() N/A to connect_error() N/A 最後の接続呼び出しのエラー コードを説明する文字列を返します。 A 文字列で記述された最近の関数呼び出しによって生成されたエラー コードは $MySQLI です。 - & GT; Field_count mysqli_field_count () n/a 最新のクエリで取得された列の数に戻ります
$ mysqli- & gt; Host_info I_get_host_info () n/a 接続タイプで使用できる文字列を返します。 ) N/A mysql サーバーのバージョン情報に戻る
$mysqli->server_version mysqli_get_server_version() N/A t ;insert_id mysqli_insert_id() N/A 自動的に生成され、最後のクエリで使用された ID を返します
$mysqli->sqlstate mysqli_sqlstate() N/A 前の Mysql 操作の SQLSTATE エラーを返します
$mysqli-> warning_count _warning_count() N/A 指定されたリンクの最後のクエリの警告の数を返します
メソッド
mysqli->autocommit( ) mysqli_autocommit() N/A データベースの自動コミット機能をオンまたはオフにします
mysqli->change_user() mysqli_change_user() N/A 指定されたデータベース接続のユーザーを変更します
mysqli->character_set_name(), mysqli ->client_encoding mysqli_character_set_name() mysqli_client_encoding() データベース接続のデフォルトの文字セットを返す
mysqli->close() mysqli_close() 前を閉じる N/A データベース接続を開く
Mysqli->commit() mysqli_commit() N /A 現在のトランザクションを送信します
Mysqli::__construct() mysqli_connect() N/A Mysql サーバーへの新しい接続を開きます [注: 静的メソッド]
Mysqli ->debug() mysqli_debug() N/A デバッグ操作を実行します
mysqli->dump_debug_info() mysqli_dump_debug_info() N/A デバッグ情報をログにダンプします
mysqli->get_charset() mysqli_get_ charset() N/A オブジェクトの文字セットを返します
Mysqli->get_connection_stats() mysqli_get_connection_stats() N/A クライアント接続の統計を返します。mysqlnd でのみ使用できます。
mysqli->get_client_info() mysqli_get_client_info() N/A 文字列で記述された Mysql クライアントのバージョンを返します。
mysqli->get_client_stats() mysqli_get_client_stats() N/A 各クライアント プロセスの統計を返します。 mysqlnd でのみ使用できます。
Mysqli->get_cache_stats() mysqli_get_cache_stats() N/A クライアントの zval キャッシュ統計を返します。 mysqlnd でのみ使用できます。
Mysqli->get_server_info() mysqli_get_server_info() N/A ドキュメントなし
Mysqli->get_warnings() mysqli_get_warnings() N/A Mysqli::init( ) mysqli_init() N/A mysqli を初期化し、リソース タイプを返すmysqli_real_connect によって使用されます。 [オブジェクトではなく、返される $mysqli オブジェクト]
Mysqli->kill() mysqli_kill() N/A Mysql スレッドを強制終了するようにサーバーに要求します
Mysqli->more_results() mysqli_more_results() N/A他にクエリの問い合わせがあるかどうかを確認します。 /A from multi_query 次の結果セットを準備します
mysqli->options() mysqli_options() mysqli_set_opt() オプションを設定します
mysqli->ping() N/A サーバー接続に ping を実行するか、接続が失われた場合は再接続を試行します
mysqli->prepare() mysqli_prepare() N/A SQL ステートメントの実行を準備します
mysqli->query() mysqli_query() N/ A データベース上でクエリを実行します
mysqli->real_connect() mysqli_real_connect () N/A Mysql サーバーへの接続を開きます
Mysqli->real_escape_string()、mysqli->escape_string() mysqli_real_escape_string() mysqli_escape_string()文字列内の SQL ステートメントで使用される特殊文字をエスケープします。この変換では、接続の現在の文字セットが考慮されます。
        mysqli->real_query() mysqli_real_query() N/A 执行一个SQL查询
        mysqli->rollback()   mysqli_rollback()   N/A 回滚当前事务
        mysqli->select_db()  mysqli_select_db()  N/A 为数据库查询选择默认数据库
        mysqli->set_charset()    mysqli_set_charset()    N/A 设置默认的客户端字符集
        mysqli->set_local_infile_default()   mysqli_set_local_infile_default()   N/A 清除用户为load data local infile命令定义的处理程序
        mysqli->set_local_infile_handler()   mysqli_set_local_infile_handler()   N/A 设置LOAD DATA LOCAL INFILE命令执行的回调函数
        mysqli->ssl_set()    mysqli_ssl_set()    N/A 使用SSL建立安装连接
        mysqli->stat()   mysqli_stat()   N/A 获取当前系统状态
        mysqli->stmt_init()  mysqli_stmt_init()  N/A 初始化一个语句并且返回一个mysqli_stmt_prepare使用的对象
        mysqli->store_result()   mysqli_store_result()   N/A 传输最后一个查询的结果集
        mysqli->thread_id()  mysqli_thread_id()  N/A 返回当前连接的线程ID
        mysqli->thread_safe()    mysqli_thread_safe()    N/A 返回是否设定了线程安全
        mysqli->use_result() mysqli_use_result() N/A 初始化一个结果集的取回
    */

    /*
            MySQL_STMT
        面向对象接口  过程化接口   别名(不要使用)    描述
        属性
        $mysqli_stmt->affected_rows  mysqli_stmt_affected_rows() N/A 返回最后一条倍执行的语句改变,删除或插入的总行数
        $mysqli_stmt->errno  mysqli_stmt_errno() N/A 返回最近一次语句调用的错误代码
        $mysqli_stmt->error  mysqli_stmt_error() N/A 返回最后一条语句错误的字符串描述
        $mysqli_stmt->field_count    mysqli_stmt_field_count()   N/A 返回给定语句得到的字段数量
        $mysqli_stmt->insert_id  mysqli_stmt_insert_id() N/A 获取前一个INSERT操作生成的ID
        $mysqli_stmt->num_rows   mysqli_stmt_num_rows()  N/A 返回语句结果集中的行数
        $mysqli_stmt->param_count    mysqli_stmt_param_count()   mysqli_param_count()    返回给定语句中参数数量
        $mysqli_stmt->sqlstate   mysqli_stmt_sqlstate()  N/A 返回前一个语句操作的SQLSTATE错误代码
        方法
        mysqli_stmt->attr_get()  mysqli_stmt_attr_get()  N/A 用于获取语句属性的当前值
        mysqli_stmt->attr_set()  mysqli_stmt_attr_set()  N/A 用于修改prepared语句的行为
        mysqli_stmt->bind_param()    mysqli_stmt_bind_param()    mysqli_bind_param() 将一个变量作为参数绑定到prepared语句上
        mysqli_stmt->bind_result()   mysqli_stmt_bind_result()   mysqli_bind_result()    将一个变量绑定到一个prepared语句上用于结果存储
        mysqli_stmt->close() mysqli_stmt_close() N/A 关闭一个prepared语句
        mysqli_stmt->data_seek() mysqli_stmt_data_seek() N/A 查看语句结果集中的任意行
mysqli_stmt->execute() mysqli_stmt_execute() mysqli_execute() 準備されたクエリを実行します
mysqli_stmt->fetch() mysqli_stmt_fetch() mysqli_fetch() 準備されたステートメントから修飾された変数に結果をフェッチします
mysqli_stmt->free_result ( ) mysqli_stmt_free_result() N/A 指定されたステートメント処理によって保存された結果セットによって占められていたメモリを解放します
$mysqli_stmt->get_result() mysqli_stmt_get_result N/A mysqlnd についてのみ利用可能なドキュメントはありません。
mysqli_stmt->get_warnings() mysqli_stmt_get_warnings() N/A ドキュメントなし
Mysqli_stmt-more_results() mysqli_stmt_more_results() N/A mysql nd.d のみドキュメントなし。 ️ $mysqli_stmt->next_result() mysqli_stmt_next_result() N/A mysqlnd についてのみ利用可能なドキュメントはありません。
mysqli_stmt->num_rows() mysqli_stmt_num_rows() N/A 属性を表示 $mysqli_stmt->num_rows
mysqli_stmt->prepare() mysqli_stmt_prepare() N/A SQL ステートメントを実行準備します
) mysqli_stmt_reset() N/A準備されたステートメントをリセットする
mysqli_stmt->result_metadata() mysqli_stmt_result_metadata() mysqli_get_metadata() 準備されたステートメントから結果セットのメタデータを返す
mysqli_st mt->send_long_data() mysqli_stmt_send_long_data() () データブロックを送信
mysqli_stmt->store_result ()オブジェクト指向インターフェイス 手続き型インターフェイス エイリアス (使用しないでください) 説明
属性
->lengths mysqli_fetch_lengths () N/A の各列の値の長さを返します。結果セットの現在の行を検索し、配列を返します
qli_data_seek() N/A 結果内の結果ポインターを任意の行に調整します
Mysqli_result->fetch_all() mysqli_fetch_all() N/A すべての結果行をフェッチし、次のように返します関連データ、数値インデックス付き配列、またはその両方の結果セット。 mysqlnd でのみ使用できます。
mysqli_result->fetch_array() mysqli_fetch_array() N/A 結果の行を連想配列、数値インデックス配列、またはその両方としてフェッチします
mysqli_result->fetch_assoc() mysqli_fetch_assoc() N/ A 行をフェッチする連想配列メソッドを使用した結果の配列
Mysqli_result->fetch_field_direct() mysqli_fetch_field_direct() N/A 単一フィールドのメタデータを取得します
フィールド
Mysqli_result->fetch_fields() mysqli_fetch_fields() N/A を表すオブジェクト配列を返します結果セットフィールド
Mysqli_result->fetch_object() mysqli_fetch_object() N/A 結果をオブジェクトとして返す 集中された現在の行
mysqli_result->fetch_row() mysqli_fetch_row() N/A 結果の行を列挙配列として返す
mysqli_result->field_seek() mysqli_field_seek() N/A 結果ポインタを特定のフィールドの先頭に設定します
mysqli_res ult->free()、mysqli_result->close、mysqli_result->free_result mysqli_free_result() N/ A 結果セットに関連付けられたメモリを解放します
*/
/*MYSQLI_STORE_RESULT と MYSQLI_USE_RESULT の違いに注意してください
実際、これら 2 つのパラメータの違いは依然として非常に大きいです。
(1) 違いは、サーバーから結果セットの行を取得する点にあります。
(2) MYSQLI_USE_RESULT はクエリを開始しますが、実際には行を取得しません
(3) MYSQLI_STORE_RESULT はすぐにすべての行を取得します
(4) MYSQLI_STORE_RESULT 結果セットがサーバーから取得されると、行が抽出され、それらの行にメモリが割り当てられますクライアントに格納されているため、mysqli_fetch_array() への以降の呼び出しではエラーが返されません。これは、mysqli_fetch_array() による NULL の戻りは常に結果セットの終わりを示すためです。結果セットに到達しました。
(5) MYSQLI_USE_RESULT 自体は行を取得せず、行ごとの取得を開始するだけです。つまり、
mysqli_fetch_array() を自分で完了するには行ごとに呼び出す必要があります。この場合、通常の状況では、mysqli_fetch_array() が NULL を返すということは、結果セットの最後に到達したことを示していますが、サーバーとの通信中にエラーが発生したことを示している可能性もあります。


MYSQLI_USE_RESULT の場合、クエリが mysqli_result オブジェクトを取得した後、data_seek を実行するとエラーが発生します。理由は、
mysqli_result::data_seek() [mysqli-result.data-seek]: 関数は MYSQL_USE_RESULT では使用できません。 MYSQLI_USE_RESULT を使用すると、MYSQLI_STORE_RESULT には多くのメモリと処理が必要になります。結果セット全体がクライアント上に保持されるため、メモリの割り当てとデータ構造の作成に非常にコストがかかります。一度に複数の行を取得する場合は、MYSQLI_USE_RESULT を使用できます。
MYSQLI_USE_RESULT は、毎回処理される 1 行に十分なスペースのみが割り当てられるため、メモリ要件が低くなります。これは、結果セット用の複雑なデータ構造を作成する必要がないため、高速になります。
一方、MYSQLI_USE_RESULT はサーバーに大きな負荷をかけるため、クライアントがすべての行を取得するのに適切であると判断されるまで、結果セット内の行を保持する必要があります。
*/
}

$dbHelper=new mysqliHelp;
$dbHelper->connect('localhost', 'root', '', 'tt');

//$dbHelper->db->select_db("tt");
//$dbHelper->db->set_charset("utf8");


//此処如果是MYSQLI_USE_RESULT,下の$dbHelper->data_seek($query,10);就会出错
$query=$dbHelper->query("製品制限22からid,cateid,titleを選択してください",MYSQLI_STORE_RESULT );
//$query=$dbHelper->query("製品セットの更新 createtime=UNIX_TIMESTAMP() 制限 22");

//$query=$dbHelper->query("insert into `product`(`cateid`,`title`,`text`,`createtime`) 値 (2,'test','content',1284822691) )");
//$query=$dbHelper->query("id=1 の `product` から削除");
//$query=$dbHelper->query("product(id,cateid,title,text,createtime) 値に置き換えます(1,2,'これはデモです','テスト',UNIX_TIMESTAMP())") ;


echo $query->num_rows."总数";

//var_dump($query);


//$row=$dbHelper->fetch_array($query);

//var_dump($row);


//finfo = $dbHelper->fetch_fields($query);

//var_dump($finfo);
// foreach ($finfo as $val) {

// printf("Name: %sn", $val->name);
// printf("テーブル: %sn", $val->table);
// printf("最大長さ: %dn", $val->max_length);
// printf("フラグ: %dn", $val->flags);
// printf("Type: %dnn", $val->type);
// }

//結果が更新または削除操作の影響を受けた行数である場合、num_rows が null、 num_fields が null
//
$dbHelper->data_seek($query,10);

$row=$dbHelper->fetch_row($query);

var_dump($row);



echo "影响行数:", "
";
var_dump($dbHelper->affected_rows());
//var_dump($dbHelper->db->affected_rows );

echo "查询行数","
";
var_dump($dbHelper->num_rows($query));
echo "列数:","
";
var_dump($dbHelper->num_fields($query));


//第1种
$sql="select id,cateid,title from product where cateid=? and title like ? and createtime<".time();

$stmt=$dbHelper->prepare($sql);

var_dump($stmt);
$stmt->bind_param('is',$cateid,$title);

$title="%%";
$cateid=10;
$stmt->execute();
$stmt->bind_result($col1, $col2,$col3);


/* 値を取得 */
while ($stmt->fetch()) {
printf("%s %s"."
", $col1, $col3);
}

echo "
";
$title="%%";
$cateid=4;
$stmt->execute();
$stmt->bind_result($col1, $col2,$col3);


/* 値を取得 */
while ($stmt->fetch()) {
printf("%s %s %s"."
", $col1, $col2,$列3);
}

$stmt->close();


//第2种

$stmt=$dbHelper->db->stmt_init();
$stmt->prepare($sql);
$stmt->bind_param('is',$cateid,$title);

$title="%%";
$cateid=10;
$stmt->execute();
$stmt->bind_result($col1, $col2,$col3);


/* 値を取得 */
while ($stmt->fetch()) {
//printf("%s %s"."
", $col1, $col3);
}

echo "
开開始multi_query:
";


//multi_query の例
//multi_query() メソッドの戻り値、および //mysqli のプロパティ errno、error、info などは、最初の SQL コマンドにのみ関係し、2 番目以降のコマンドが存在するかどうかを判断することはありません実行時に問題が発生したため、 //multi_query() メソッドの実行時に戻り値が TRUE になり、その後のコマンドの実行時に問題が発生したことを意味しません。

$sql="cateid=4 の製品から id、cateid、title を選択;";
$sql.="cateid=10 の製品から id,cateid,title を選択";

$query=$dbHelper->db->multi_query($sql);

if($query)
{
do {
/* 最初の結果セットを保存 */
//下側两种方法有什么区别?
// if ($result = $dbHelper->db->store_result()) {
// while ($row = $result->fetch_row()) {
// $data[]=$row ;
// }
// $result->free();
// }
if ($result = $dbHelper->db->use_result()) {// 戻り値 mysqli_result 型
//$result->data_seek(0);// 戻り値
while ($ row = $result->fetch_row()) {
$data[]=$row;
}
//$result->close();
}


/* 分割印刷 */
if ($dbHelper->db->more_results()) {
printf("-----------------n ");
$data[]="_______________________________";
}
} while ($dbHelper->db->next_result());

}
var_dump($data);
//終了;
//行事务の例
//保護操作の表時 innodb タイプの表
//結果が MyISAM、逻出错の话、会行すべての操作、不回滚
$price=1;
$成功=true;
$dbHelper->db->autocommit(0);
$result=$dbHelper->query("update product set cateid=cateid-$price where id=1000" );
if(!$result || $dbHelper->affected_rows()!=1)
{
$success=false;

}

$result=$dbHelper->query("update product set cateid=cateid+$price where id=2");
if(!$result || $dbHelper->affected_rows()!=1)
{
$success=false;

}

if($success)
{
$dbHelper->db->commit();
「成功」をエコーし​​ます。

}else
{
$dbHelper->db->rollback();
「失败」をエコーし​​ます。

}
$dbHelper->db->autocommit(1);


//var_dump( $dbHelper->insert_id());
var_dump($mysql_debug_query);  //打印sql查询情報


//
?>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/824913.html技術記事 ?phpdefine("MYSQL_OPEN_LOGS",true);クラス mysqliHelp {プライベート $db; public function __construct() { //如果要查询日志ログの话,怎么办 } public function __get($name ) { /...
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート