3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ADODB 手册

發布時間:2023/12/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ADODB 手册 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

PHP ADODB1.99版手冊 (修正版)

PHP ADODB 1.99版手冊中文翻譯 <修正版>

ADODB

PHP 在數據庫的支持上是很令人稱道的,幾乎所有的知名數據庫系統都有對應的函數群支持,而且支持的很完整。但很不幸的,每一群數據庫支持函數無論在名稱或參數結構上,都有很大的差異,這使得PHP的系統開發者在面臨更換數據庫時,總會覺得痛苦萬分。難道這個問題就沒有解決方法嗎?呵呵,當然有,答案就是我現在要介紹的 ADODB 這個PHP物件。

ADODB提供了完整的方法和屬性讓工程師去控制數據庫系統,更棒的是你只要記得它的功能就好了,因為不同的數據庫系統,只要修改一個屬性值就可以了,ADODB會自動依據設定取用正確的PHP函數。此外,最多再配合數據庫系統修改修改SQL指令,你的PHP系統就可以在最短的時間內更換到另一個數據庫系統了,如果在編寫程序時,對SQL指令能做妥善規劃,那就更快了。

經過以上的介紹,相信你已經對ADODB的功用有所了解,以下為ADODB的詳細介紹。

取得ADODB

你可以在?http://php.weblogs.com/ADOdb?取得最新版的ADODB。我在編寫本文時,最新版本是1.99版,版權采BSD-Style及LGPL雙軌制,換句話就是Freeware,沒有什么限制。但在取得ADODB后,最好還是要看一下相關版權說明及用法,并和本文對照一下,以免錯誤。

使用ADODB

基本上使用ADODB是相當容易的,取得壓縮文件后解開,我建議將整個內容都解到ADODB的目錄里。然后你可以一邊參考本文,一邊研究里面的范例,就放在里面的test目錄下。

由于ADODB附上的說明十分完整詳實,以下的說明大部份來自ADODB的readme.htm,這里不是全部的內容,我把一些我認為沒有用的內容都去掉了,像版本差異說明、何編寫支持ADODB的驅動程序等與應用無關的部份。想要了解全部內容的讀者還是可以自己去參考 readme.htm。


  • 簡介

  • 特色

  • 安裝

  • 啟動ADODB

    • ADONewConnection

    • NewADOConnection

  • 支持的數據庫

  • 學習手冊

    • 范例 1 : Select

    • 范例 2 : 進階 Select

    • 范例 3 : Insert

    • 范例 4 : 除錯及 rs2html 范例

    • 范例 5 : MySQL 及選單

    • 范例 6 : 一次連接兩個數據庫

    • 范例 7 : 產生更新及新增的SQL指令

    • 范例 8 : 用下一筆及上一筆實作卷動

  • 客制化錯誤處理及PEAR錯誤

  • 數據集快取

  • 參考手冊

    • ADOConnection

      • 連接數據庫:Connect?PConnect

      • 執行SQL:Execute?CacheExecute?SelectLimit?CacheSelectLimit?Prepare?PrepareSP?GetOne?GetRow

      • 產生 更新/新增:GetUpdateSQL?GetInsertSQL

      • BLOB :?UpdateBlob?UpdateClob?UpdateBlobFile

      • 換頁/卷頁 :?PageExecute?CachePageExecute

      • 清除 :?CacheFlush?Close

      • 交易 :?BeginTrans?CommitTrans?RollbackTrans

      • 提取數據 :?$ADODB_FETCH_MODE?BlankRecordSet

      • 字串 :?Concat?qstr

      • 日期 :?DBDate?DBTimeStamp?UnixDate?UnixTimeStamp

      • "列"管理器 :?Affected_Rows?Insert_ID?GenID

      • 錯誤處理 :?ErrorMsg?ErrorNo

      • 數據辭典 :?MetaDatabases?MetaTables?MetaColumns?MetaColumnNames

      • 反對 :?Bind?(? 沒有說明)

    • ADORecordSet

      • 取單筆記錄 :?FetchRow?FetchInto?FetchObject?FetchNextObject?GetRowAssoc?Fields?GetAssoc

      • 取全部記錄 :?GetArray?GetRows

      • 卷動 :?Move?MoveNext?MoveFirst?MoveLast?AbsolutePosition?CurrentRow?AtFirstPage?AtLastPage?AbsolutePage

      • 選單制作 :?GetMenu?GetMenu2

      • 日期 :?UserDate?UserTimeStamp?UnixDate?UnixTimeStamp

      • 記錄信息 :?RecordCount?PO_RecordSet

      • 字段信息 :?FieldCount?FetchField?MetaType

      • 清除 :?Close

  • rs2html 公用函式說明??范例

簡介

由于PHP的數據庫存取函數沒有標準化,所以我們需要一組函數庫或是類別來隱藏不同數據庫函數介面間的差異,讓我們可以很簡單的去切換數據庫,而這,就是ADODB的目的。

ADODB目前支持MySQL, Oracle, Microsoft SQL Server, Sybase, Sybase SQL Anywhere, Informix, PostgreSQL, FrontBase, Interbase (Firebird 及 Borland 版本), Foxpro, Access, ADO 和 ODBC。ADODB也有透過ODBC成功連接Progress及DB2的報告,我們希望能有更的人提供驅動介面來支持更多的數據庫。

PHP4支持連接變量(session variables),使用者可以透過ADODB保存連接信息,以達成真正的可攜性及彈性,相關的用法及信息請自行參考ADOdb-session.php這個范例。

另外,如果要編寫一個具有高度可移植性的SQL碼,也可以參閱?http://php.weblogs.com/portable_sql?這篇文章。

特色

  • 對熟悉Windows的工程師而言,ADODB很容易使用,因為ADODB里的很多功能和Microsoft的ADO很像。

  • 與其它的PHP數據庫類別不同,它們大多集中在處理與 select 指令有關的東西,而ADODB對于 inserts 及 update 也提供額外的支持,并且可以很快的連接到多數據庫。所提供的方法更擴及日期的掌握,字串的連接及字串標記字元差異處理(在某些數據庫間字串的連接和標記符號是有差異的)

  • 類型對照系統是內建的,所以我們可以設定或描述像CHAR,TEXT及STRING在不同的數據庫間其實是相同的數據類型。

  • 更容易去移植,因為所有與數據庫相依的程序碼被都隱藏在后端,所以使用者不再需要去移植類別里的邏輯。

  • 支持 PHP4 連接變量,請參考 ADOdb-session.php。

安裝

首先要確定你所使用的PHP版本是 4.01pl2 或是之后的版本(因為ADODB使用到了 require_once及include_once兩個函數)。解壓縮全部的文件到你的Web服務器可以存取的一個目錄里。

要測試ADODB你需要一個數據庫,開啟 testdatabase.inc.php 這個文件,并且修改連接參數,以適合你所使用的數據庫。這個程序會建立一個新的數據表在你的數據庫中,以支持我們提供的測試程序及范例。

就這樣,你安裝好了。

啟動ADODB

當要執行ADODB時,至少有兩個文件要被載進來,第一個是 ADOdb.inc.php ,這里面包含了所有數據庫類中要被使用的函數。而對數據庫實作的程序碼則被置放在ADOdb-????.inc.php文件里。

例如說,要連接一個mysql數據庫:

include('/path/to/set/here/ADOdb.inc.php'); $conn = &ADONewConnection('mysql');

無論何時你需要連接到一個數據庫時,你必需使用ADONewConnection()函數建立了一個連接物件。ADONewConnection接受一個選擇性參數, <database-name-here>。如果沒有參數被指定,它將會使用被 ADOLoadCode() 所載入的最后一個數據庫。 NewADOConnection() 是另一個相同的函數。

當你建立好一個連接物件時,你并沒有真的連接上你的數據庫。你仍需要使用?$conn->Connect()?或者?$conn->PConnect()?兩個方法來完成真正的連接。

你可以參考教學手冊里的范例,對上面的說明做更深入的了解。

支持的數據庫

名稱

測試狀態

數據庫

RecordCount() 支持與否

需安裝的驅動程序

操作系統

access

B

Microsoft Access/Jet. 需要建立一個 ODBC/DSN。

Y/N

ODBC

Windows only

ado

B

一般未經特別指定的數據庫系統, 透過ADO,允許不設定 DSN連接,使用OLEDB以提供較佳的效能。

? 視數據庫而定

ADO or OLEDB provider

Windows only

ado_access

B

Microsoft Access/Jet 透過ADO,允許不設定 DSN連接,使用OLEDB以提供較佳的效能。

Y/N

ADO or OLEDB provider

Windows only

ado_mssql

B

Microsoft SQL Server 透過ADO,允許不設定 DSN連接,使用OLEDB以提供較佳的效能。

Y/N

ADO or OLEDB provider

Windows only

db2

C

DB2. 可以透過ODBC獲得可以信賴的運作效果。

Y/N

DB2 CLI/ODBC interface

Unix and Windows.?Unix install hints.

vfp

A

Microsoft Visual FoxPro,需要建立一個ODBC/DSN

Y/N

ODBC

Windows only

fbsql

C

FrontBase.

Y

?

Unix and Windows

ibase

B

Interbase 6或更早的版本。有些使用者報告必需使用如下的方式連接
$db->PConnect('localhost:c:/ibase/employee.gdb', "sysdba", "masterkey")目前沒有支持 Affected_Rows 方法

Y/N

Interbase client

Unix and Windows

firebird

C

interbase的Firebird版本

Y/N

Interbase client

Unix and Windows

borland_ibase

C

Borland 的Interbase 6.5 或更新版

Y/N

Interbase client

Unix and Windows

informix

C

Informix

Y/N

Informix client

Unix and Windows

mssql

A

Microsoft SQL Server 7.也可以和Microsoft SQL Server 2000運作的很好。但在日期格式上仍有一些問題。例如在日期時間的返回值上,就不會返回秒數數值。

Y/N

Mssql client

Unix and Windows.
Unix install howto.

mysql

A

MySQL 不支持交易處理

Y/N

MySQL client

Unix and Windows

mysqlt?或?maxsql

A

MySQL 支持交易處理

Y/N

MySQL client

Unix and Windows

oci8

A

Oracle 8/9. 支持比?oracle?驅動程序還多的功能 (例如: Affected_Rows). 在連接之前,你可能需要先配好環境變量('ORACLE_HOME=...')

有兩個方式進行連接,用服務器的IP或服務名稱:
PConnect('serverip:1521','scott','tiger','service')
PConnect('', 'scott', 'tiger', 'tnsname').

Y/N

Oracle client

Unix and Windows

oci8po

A

Oracle 8/9 可攜式驅動程序

Y/N

Oracle client

Unix and Windows

odbc

A

標準 ODBC

用 PConnect('DSN','user','pwd').連接。

? depends on database

ODBC

Unix and Windows.?Unix hints.

odbc_mssql

C

用 ODBC 連接 MSSQL

Y/N

ODBC

Unix and Windows.

odbc_oracle

C

用 ODBC 連接 ORACLE

Y/N

ODBC

Unix and Windows.

oracle

C

支持舊的 Oracle 7 client API. 不支持 $ADODB_FETCH_MODE.

Y/N

Oracle client

Unix and Windows

postgres

A

PostgreSQL 不支持 LIMIT 指令.

Y

PostgreSQL client

Unix and Windows.

postgres7

A

PostgreSQL 支持 LIMIT 及其它版本 7 功能

Y

PostgreSQL client

Unix and Windows.

sqlanywhere

C

Sybase SQL Anywhere.?

Y/N

SQL Anywhere ODBC client

?

sybase

C

Sybase.

Y/N

Sybase client

Unix and Windows.?Unix hints.

 

測試狀態欄的代碼說明如下:

A=已經經過很多人驗證及測試,可靠度最高。
B=已經測試并使用了,但可能仍有一些功能沒有達成。
C=使用者自行配置或試用的驅動程序,可能沒有完全支持ADODB的功能。

"RecordCount()支持與否",指的是RecordCount()函數是否會返回用SELECT指令取得的記錄筆數(不支持時傳回-1)。如果這個字段的值出現了 Y/N ,那表示當全域變量 $ADODB_COUNTER=true 時,會以模擬的方式取得,而這是預設值。要注意的是,如果你預測記錄筆數會很大時,最好把這個值設為false,也就是關掉這個模擬功能,因為這會耗掉非常多的內存,以做為快取之用。由于這個變量在每次執行時都會檢查,所以你可以選擇性的使用或不使用。

所有支持$ADODB_FETCH_MODE的數據庫都支持 ADODB_FETCH_NUM(以字段順序存取) 及 ADODB_FETCH_ASSOC(以字段名稱存取),兩種模式。而將值設為 ADODB_FETCH_DEFAULT(數據庫預設模式存取),則是由數據庫的功能來決定的,所以不具備可攜性,而 ADODB_FETCH_BOTH(雙模式存取) 也一樣。


學習手冊

范例 1: Select 指令

任務:連接到 Access 的 Northwind DSN,然后在每一列顯示頭2個字段。(Northwind 北風數據庫,在ODBC設定的DSN,是Access的標準范例數據庫)

在這個范例中,我們建立一個 ADOConnection 物件,它代表了和數據庫的連接。連接是以?PConnect?函數來初始化的,然后會持續的連接著。任何時候我們要查詢數據庫時,我們就調用 ADOConnection.Execute() 函數,這將會返回一個 ADORecordSet物件。事實上它只是一個指向在fields[]陣列中,目前記錄的指標,我們使用MoveNext()來在記錄間移動。

注意:另一個很有用的函數?SelectLimit?并沒有在這個范例里使用,這個函數允許我們去限制顯示的數據筆數。

<? include('ADOdb.inc.php'); # 載入ADODB $conn = &ADONewConnection('access'); # 建立一個連接 $conn->PConnect('northwind'); # 連接到 MS-Access 北風數據庫 $recordSet = &$conn->Execute('select * from products'); if (!$recordSet) print $conn->ErrorMsg(); else while (!$recordSet->EOF) { print $recordSet->fields[0].' '.$recordSet->fields[1].'<BR>'; $recordSet->MoveNext(); }$recordSet->Close(); # 選擇性執行 $conn->Close(); # 選擇性執行?>

在這個例子中,$recordSet返回了存在$recordSet->fields陣列里,目前所指向的記錄。以字段編號為索引,起始值為0。我們使用MoveNext()函數來移動到下一筆記錄,當到了最后一筆時,EOF屬性會被設定為true。當Execute()函數執行有錯誤時,會返回一個false值,而不是一個recordset物件。

$recordSet->fields[]陣列是由PHP數據庫擴充函數庫所產生的。有一些數據庫擴充函數庫僅支持以編號來進行索引,而不支持以字段名為索引。要強迫使用字段名索引,也就是要使用關連式陣列,請使用 $ADODB_FETCH_MODE 全域變量來設定。當一個數據集被Execute()或是SelectLimit()函數建立時,都會保存而且使用儲如此類的設定模式。

$ADODB_FETCH_MODE = ADODB_FETCH_NUM; $rs1 = $db->Execute('select * from table'); $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; $rs2 = $db->Execute('select * from table'); print_r($rs1->fields); # shows array([0]=>'v0',[1] =>'v1') print_r($rs2->fields); # shows array(['col1']=>'v0',['col2'] =>'v1')

上面的范例說明,如果要以順序來存取字段,就將 $ADODB_FETCH_MODE 的值設為 ADODB_FETCH_NUM,要以關連式陣列(以字段名)存取字段,就要將值設為 ADODB_FETCH_ASSOC。

要取得在被選到的記錄筆數,你可以使用$recordSet->RecordCount()方法。注意,如果不能確定得到的記錄筆數,會返回 -1 。

范例 2: 進階的 Select 指令(使用 Field 物件)

任務:選取一個數據表,顯示最前面的二欄。如果第二欄是一個日期或時間型態字段,將它格式化成US格式。

<? include('ADOdb.inc.php'); $conn = &ADONewConnection('access'); $conn->PConnect('northwind'); $recordSet = &$conn->Execute('select CustomerID,OrderDate from Orders'); if (!$recordSet) print $conn->ErrorMsg(); else while (!$recordSet->EOF) { $fld = $recordSet->FetchField(1); $type = $recordSet->MetaType($fld->type); if ( $type == 'D' || $type == 'T') print $recordSet->fields[0].' '. $recordSet->UserDate($recordSet->fields[1],'m/d/Y').'<BR>'; else print $recordSet->fields[0].' '.$recordSet->fields[1].'<BR>'; $recordSet->MoveNext(); } $recordSet->Close(); # optional $conn->Close(); # optional?>

在這個例子中,我們使用?FetchField() 函數來檢查第二個字段的數據類型。這將會返回一個至少有三個字段的物件,字段說明如下:

  • name: 字段名

  • type: 字段的數據原生類型native field type of column

  • max_length: 字段的最大長度,部份數據庫像MySQL,并不返回字段的正確值,以這個例子而言,就會返回 -1 。

然后我們使用?MetaType() 去轉換原生類型成通用類型,目前通用類型定義如下:

  • C:? character 字段,應該使用 <input type="text"> 標記來取值。

  • X: 文字字段(Text) , 長文字字段,使用 <textarea> 標記來顯示數據。

  • B: Blob 字段或者大型的二位元物件(像程序,圖檔等)。

  • D: 日期字段

  • T: 時間字段

  • L: 邏輯字段(真假值)或位元字段

  • N: 數字字段,包含自動進位、編號、整數、浮點數、實數等。

  • R: 序列字段,包含了序列、自動增進整數,只對被選擇的數據庫作用。

如果對應類型是日期或時間,那你可以使用?UserDate() 函數來設定輸出的日期格式。這個函數會轉換 PHP SQL 日期字串格式為使用者定義的格式。 另一個使用MetaType()的時機是在進行SQL新增或更新指令時,數據格式驗證用。

范例 3: 新增

新增一筆記錄到訂單數據表,里面包含了日期和字串,為了能被數據庫正常存取,字串必需校正,以避免部份標記字元。例如:有單引號的字串,John's。

<? include('ADOdb.inc.php'); # load code common to ADOdb $conn = &ADONewConnection('access'); # create a connection$conn->PConnect('northwind'); # connect to MS-Access, northwind dsn $shipto = $conn->qstr("John's Old Shoppe");$sql = "insert into orders (customerID,EmployeeID,OrderDate,ShipName) "; $sql .= "values ('ANATR',2,".$conn->DBDate(time()).",$shipto)";if ($conn->Execute($sql) === false) { print 'error inserting: '.$conn->ErrorMsg().'<BR>'; } ?>

在這個范例中,我們看見了ADODB更進一步的日期及標點符號的處理方式。Unix 日期時間標示(長整數)被DBDate()格式化成Access可以接受的格式,而帶了縮寫符號的 John's Old Shoppe 則被?qstr() 函數處理成 John''s Old Shoppe 字串,以被數據庫合法存取。

觀察 Execute 指令的錯誤處理。如果?Execute() 執行有錯誤發生時,會傳回 False 值。而最后的錯誤信息可以由??ErrorMsg() 來顯示。

附記:php_track_errors旗標可以被啟動,以便將錯誤信息保存起來。

范例 4: 除錯

<? include('ADOdb.inc.php'); # load code common to ADOdb $conn = &ADONewConnection('access'); # create a connection $conn->PConnect('northwind'); # connect to MS-Access, northwind dsn $shipto = $conn->qstr("John's Old Shoppe"); $sql = "insert into orders (customerID,EmployeeID,OrderDate,ShipName) "; $sql .= "values ('ANATR',2,".$conn->FormatDate(time()).",$shipto)"; $conn->debug = true; if ($conn->Execute($sql) === false) print 'error inserting'; ?>

在上面的例子中,我們藉由設定 debug=true 來啟動除錯模式。這將會在執行指令時會先將SQL指令顯示,并且會顯示所有的錯誤信息,而不需要去調用?ErrorMsg() 。顯示數據集的部份,可以參考?rs2html() 范例。

其它的請參考自定錯誤處理的說明。

范例 5: MySQL及選單

連接到MySQL數據庫agora ,并且從SQL命令中建立一個 <select> 選單,<option>的標題是第一個字段,返回值是第二個字段。

<? include('ADOdb.inc.php'); # load code common to ADOdb $conn = &ADONewConnection('mysql'); # create a connection $conn->PConnect('localhost','userid','','agora');# connect to MySQL, agora db $sql = 'select CustomerName, CustomerID from customers'; $rs = $conn->Execute($sql); print $rs->GetMenu('GetCust','Mary Rosli'); ?>

Here we define a menu named GetCust, with the menu option 'Mary Rosli' selected. See?GetMenu(). We also have functions that return the recordset as an array:?GetArray(), and as an associative array with the key being the first column:?GetAssoc().

這里,我們定義了一個名為GetCust的選單,預設值是'Mary Rosli'。相關說明請參考?GetMenu() 。我們也將數據集以陣列返回的方式寫在?GetArray()方法里。而另外返回關聯式陣列的方法則使用?GetAssoc() ,其中第一個字段是這個字段的鍵值。

在 1.50 版以后的 ADODB 里,是使用公共變量 $ADODB_FETCH_MODE 來設定返回的陣列是以編號或是關連式字串做索引。

范例 6: 一次連接兩個數據庫

<? include('ADOdb.inc.php'); # 載入 ADOdb $conn1 = &ADONewConnection('mysql'); # 建立一個 mysql 連接 $conn2 = &ADONewConnection('oracle'); # 建立一個 oracle 連接$conn1->PConnect($server, $userid, $password, $database); $conn2->PConnect(false, $ora_userid, $ora_pwd, $tnsname);$conn1->Execute('insert ...'); $conn2->Execute('update ...'); ?>

范例 7: 產生 Update 及 Insert 的SQL指令

ADODB 1.31版起,新增了兩個數據集函數:GetUpdateSQL()及GetInsertSQL()。這允許你在執行了像"SELECT * FROM table query WHERE..."這樣的查詢函數后,建立一個 $rs->fields復本,改變這些字段,然后自動產生出更新或是新增的SQL指令。

以下我們展示如何運用這些函數,我們將存取一個數據表,帶有下列字段:(ID,FirstName,LastName,Created)。在這些函數被執行前,你需要藉由一個對數據表的查詢指令(select)來初始化一個數據集。

<?
#==============================================
#? GetUpdateSQL() 及 GetInsertSQL() 范例碼
#==============================================
include('ADOdb.inc.php');
include('tohtml.inc.php');

#==========================
# 以下的程序碼測試新增狀態

$sql = "SELECT * FROM ADOXYZ WHERE id = -1";?
# 從數據庫中查詢出一個空的數據集

$conn = &ADONewConnection("mysql");? # 建立一個連接
$conn->debug=1;
$conn->PConnect("localhost", "admin", "", "test"); # 連接到 MySQL, 數據庫名稱為 test
$rs = $conn->Execute($sql); # 執行查詢,并取得一個空的數據集

$record = array(); # 初始化一個陣列,以便存放記錄數據供新增用

# 設定記錄中的字段值
$record["firstname"] = "Bob";
$record["lastname"] = "Smith";
$record["created"] = time();

# 傳入空的數據集及字段數據陣列到GetInsertSQL函數中,以執行功能
# 這個函數將會依傳入的數據,返回一個全格式的 INSERT SQL指令

$insertSQL = $conn->GetInsertSQL($rs, $record);

$conn->Execute($insertSQL); # 將記錄挿入數據庫中

#==========================
# 以下的程序碼測試更新狀態

$sql = "SELECT * FROM ADOXYZ WHERE id = 1";?
# 選擇一筆記錄以便更新

$rs = $conn->Execute($sql); # 執行這個查詢,并取得一個存在的記錄來更新

$record = array(); # 初始化一個陣列,以存放要更新的數據

# 設定字段里的值
$record["firstname"] = "Caroline";
$record["lastname"] = "Smith"; # 更新 Caroline的姓由 Miranda 變成 Smith

# 傳入這個只有單一記錄的數據集以及含有數據的陣列到 GetUpdateSQL函數里
# 函數將會返回一個具有正確 WHERE 條件的 UPDATE(更新) SQL 指令
$updateSQL = $conn->GetUpdateSQL($rs, $record);

$conn->Execute($updateSQL); # 更新數據庫中的記錄
$conn->Close();
?>

范例 8: 使用上一筆及下一筆實作卷動

我們使用HTTP取得 $next_page 變量,以追蹤要跳去那一頁并且保存目前頁碼在 session 變量 $curr_page 里。

我們調用連接物件的 PageExecute()函收去取得我們要的數據集,然后我們使用數據集的 AtFirstPage() 及 AtLastPage() 函數去決定是否顯示下一頁和上一頁按鈕。

<?php include_once('ADOdb.inc.php'); include_once('tohtml.inc.php'); session_register('curr_page');$db = NewADOConnection('mysql'); $db->Connect('localhost','root','','xphplens'); $num_of_rows_per_page = 10; $sql = 'select * from products';if (isset($HTTP_GET_VARS['next_page'])) $curr_page = $HTTP_GET_VARS['next_page']; if (empty($curr_page)) $curr_page = 1; ## at first page$rs = $db->PageExecute($sql, $num_of_rows_per_page, $curr_page); if (!$rs) die('Query Failed');if (!$rs->EOF && (!$rs->AtFirstPage() || !$rs->AtLastPage())) { if (!$rs->AtFirstPage()) { ?> <a href="<?php echo $PHPSELF,'?next_page=',$rs->AbsolutePage() - 1 ?>">Previous page</a> <?php } if (!$rs->AtLastPage()) { ?> <a href="<?php echo $PHPSELF,'?next_page=',$rs->AbsolutePage() + 1 ?>">Next page</a> <?php } rs2html($rs); } ?>

以上的程序碼可以在 testpaging.php 范例里找到。

使用自定錯誤處理及 PEAR_Error

在之前的版本,你可以使用像 $con->debug=true ; 這樣的設定來進行除錯。但在 1.50 版后,我們提供了另一種方法來處理錯誤狀態。我們讓工程師可以使用 ADODB 的自訂錯誤處理程序功能。

ADODB 提供了兩種自訂處理方式,你可以配合你的的需要而修訂。第一個方法放在 ADOdb-errorhandler.inc.php 文件里。這讓你可以使用標準的 PHP 函數 err_reporting 去控制要顯示怎樣的錯誤信息及 trigger_error 去調用 PHP 預設的錯誤處理程序。

引入了上述文件后(ADOdb-errorhandler.inc.php),當發生了下列的錯誤后,將會使得 trigger_error($errorstring,E_USER_ERROR)被調用。

  • Connect() 或 PConnect() 執行失敗時。

  • 執行 SQL 指令的函數失敗時,如 Execute() 或 SelectLimin() 。

  • GenID() 進入了無限回圈時。

  • 這里的 $errorstring 變量是由 ADODB 所產生的。而且會包含了有用的除錯信息,類似于隨后會建立的 error.log 數據。所以,為了要能正確提供除錯信息,你要在建立 ADOConnection 物件前,就把 ADOdb-errorhandler.inc.php 引入到程序碼中。

    If you define error_reporting(0), no errors will be shown. If you set error_reporting(E_ALL), all errors will be displayed on the screen.

    如果你設定了 error_reporting(0) 的話,將不會有任何錯誤被顯示。如果你設定了 error_reporting(E_ALL),那將會顯示所有的錯誤信息。

    以下是一個簡單的范例:

    <?php error_reporting(E_ALL); # 顯示所有的錯誤信息 include('ADOdb-errorhandler.inc.php'); include('ADOdb.inc.php'); include('tohtml.inc.php'); $c = NewADOConnection('mysql'); $c->PConnect('localhost','root','','northwind'); $rs=$c->Execute('select * from productsz'); #不正確的數據表 productsz'); if ($rs) $rs2html($rs); ?>

    如果你要把錯誤信息記錄下來,你可以定義兩個選擇性常數 ADODB_ERROR_LOG_TYPE, ADODB_ERROR_LOG_DEST。有關于 ADODB_ERROR_LOG_TYPE 的值,你可以去參考 PHP 使用手冊中有關于 error_log 的說明。在以下的范例中,我使將它設為 3,意思是指將信息記錄到常數 ADODB_ERROR_LOG_DEST 所設定的文件中。

    <?php error_reporting(0); # 不顯示任何的錯誤信息 define('ADODB_ERROR_LOG_TYPE',3); define('ADODB_ERROR_LOG_DEST','C:/errors.log'); include('ADOdb-errorhandler.inc.php'); include('ADOdb.inc.php'); include('tohtml.inc.php');$c = NewADOConnection('mysql'); $c->PConnect('localhost','root','','northwind'); $rs=$c->Execute('select * from productsz'); ## 不正確的數據表 productsz if ($rs) $rs2html($rs); ?>

    以下則是寫在 error.log 檔的錯誤信息:

    (2001-10-28 14:20:38) mysql error: [1146: Table 'northwind.productsz' doesn't exist] in EXECUTE("select * from productsz")

    第二種錯誤處理方法是?ADOdb-errorpear.inc.php?。使用這種方式,在錯誤發生時會產生 PEAR_Error 衍生物件,而最后產生的 PEAR_Error 物件可以被 ADODB_Pear_Errir() 函數取回。

    <?php include('ADOdb-errorpear.inc.php'); include('ADOdb.inc.php'); include('tohtml.inc.php'); $c = NewADOConnection('mysql'); $c->PConnect('localhost','root','','northwind'); $rs=$c->Execute('select * from productsz'); #不正確的數據表 productsz'); if ($rs) $rs2html($rs); else { $e = ADODB_Pear_Error(); echo '<p>',$e->message(),'</p>'; } ?>

    在引入 ADOdb-errorpear.inc.php 檔之前,藉由定義 ADODB_PEAR_ERROR_CLASS 常數,你可以使用一個 PEAR_Error 衍生類別。為了方便除錯,你可以在 PHP 程序碼的最前面定義預設的錯誤理方式為 PEAR_ERROR_DIE,這將會使得程序一出錯,馬上就輸出錯誤信息,并且停止執行。

    include('PEAR.php'); PEAR::setErrorHandling('PEAR_ERROR_DIE');

    注意,當錯誤產生時,ADODB并沒有明確的返回一個 PEAR_Error 物件給你。你必需要去調用 ADODB_Pear_Error() 函數去取回最后的錯誤內容。或者,你可以使用 PEAR_ERROR_DIE 這個技巧。

    數據集快取

    現在,ADODB使用 CacheExecute(),CachePageExecute()及CacheSelectLimit()函數來支持數據集快取。用法類似于沒有快取的函數,除了要加上一個新的參數 $secs2cache。

    以下是一個范例 :

    include('ADOdb.inc.php'); # 載入ADODB $ADODB_CACHE_DIR = '/usr/ADODB_cache'; $conn = &ADONewConnection('mysql'); # 建立一個連接 $conn->PConnect('localhost','userid','','agora');# 連接到 MySQL, agora 數據庫 $sql = 'select CustomerName, CustomerID from customers'; $rs = $conn->CacheExecute(15,$sql);

    第一個參數是設定查詢的快取秒數。隨后調用的查詢將會使用存放在由? $ADODB_CACHE_DIR 變量指定的快取數據。要強迫查訊執行,并且更新快取記錄,使用 CacheExecute() 函數,并且將第一個參數設為 0 。或者,使用 CacheFlush($sql) 也行。

    基于安全的考量,如果你要使用 $ADODB_CACHE_DIR,我們建議你將在 php.ini 里的 register_globals 設成 off。?

    在 ADODB 1.80版以后,在 CacheSelectLimit() 及 CacheExecute() 中,參數 secs2cache 是選擇性的。如果你不填上去,系統將會使用 $connection->cacheSecs 屬性的值,它的預設值是 60 分鐘。

    $conn->Connect(...); $conn->cacheSecs = 3600*24; // 快取24小時 $rs = $conn->CacheExecute('select * from table');

    參考手冊

    以[]包起來的參數為選用參數,可有可無。

    共用變量

    $ADODB_COUNTRECS

    當本變量($ADODB_COUNTRECS)被設為 true 時,如果數據庫驅動程序介面(API)不支持返回被 SELECT 指令所選取的數據筆數,那么 RecordCount() 函數將會自動模擬,并返回正確的數據筆數,預設值即為 true。模擬方式是建立一個內存暫存區來放置這些數據,因此當取回的數據筆數很大時,會占用很大量的內存。當設定本變量值為 false 時,會有最好的效能。本變量在每次執行查訊時都會自動檢查,所以你可以依實際需要在每次查詢前進行設定。

    $ADODB_CACHE_DIR

    如果你使用了數據集快取功能,那么那些快取數據都會被置放到這個變量所指定的目錄里。所以當你要使用諸如 CacheExecute() 函數前,你應該要先設定好本變量。期于安全的考量,如果你要使用 $ADODB_CACHE_DIR,我們建議你將在 php.ini 里的 register_globals 設成 off。?

    $ADODB_FETCH_MODE

    這個共用變量決定了數據集以那種方式將數據傳給陣列。數據集在被建立時(如 Execute()或SelectLimit())會把本變量($ADODB_FETCH_MODE)的值保存下來,而隨后本變量($ADODB_FETCH_MODE)的任何改變都不會影響到現存的數據集,只有在以后數據集被建立起來時才會改變。

    以下為為已定義的常數:

    define('ADODB_FETCH_DEFAULT',0);
    define('ADODB_FETCH_NUM',1);
    define('ADODB_FETCH_ASSOC',2);
    define('ADODB_FETCH_BOTH',3);

    以下為一個使用的例子:

    $ADODB_FETCH_MODE = ADODB_FETCH_NUM; $rs1 = $db->Execute('select * from table'); $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; $rs2 = $db->Execute('select * from table'); print_r($rs1->fields); # 顯示 array([0]=>'v0',[1] =>'v1') print_r($rs2->fields); # 顯示 array(['col1']=>'v0',['col2'] =>'v1')

    在本范例中,如你所見兩個數據集在被Execute()建立時,會依據 $ADODB_FERCH_MODE 的值來決定保存及使用的存取模式。

    如果沒有任何的模式被設定,預設值則是 ADODB_FETCH_DEFAULT。呈現的模式則依據數據庫驅動程序而有所不同。為了可攜性,我們建議你固定為 ADODB_FETCH_NUM 及 ADODB_FETCH_ASSOC,因為有許多驅動程序并不支持 ADODB_FETCH_BOTH 。


    ADOConnection

    提供連接數據庫,執行SQL指令以及一組準格式化的SQL相關函數等功能的物件。

    ADOConnection 屬性

    databaseType: 要連接的數據庫系統名稱,如 odbc,mssql,mysql┅等。詳細內容請參考上表。

    dataProvider: 下層的數據庫結結機制,除了使用?odbc?或?ado?外,一般正常會設為??native

    host:?數據庫主機名稱,可用IP或來源名稱(DSN)進行連接。如203.74.225.22 , dbs1.nukepro.com , "localhost" , "odbc_dsn1"

    database: 數據庫或連接名稱,如果使用了 ado,則會控制 ado 數據提供驅動程序(ado data provider)。

    user: 登入時的 ID,密碼則基于安全考量沒有保留。

    raiseErrorFn: 允許你定義一個錯誤處理函數,請參考 ADOdb-errorhandler.inc.php 的范例.

    debug: 被設定為 true 時,會顯示除錯信息。

    concat_operator: 連接運算元,一般會設為 '+' 或 '||'。這個運算元是為了在 SQL 里連接字串的。會在?Concat?函數中被用到。

    fmtDate: 日期格式,在DBDate函數中會使用到,做為送日期數據到數據庫的依據。在Access格式為'#Y-m-d#',在MySQL格式為"/Y-m-d/"。

    fmtTimeStamp:?時間格式,在?DBTimeStamp?函數中要送時間數據到數據庫時會使用到。

    true: 數據中真值的表現方式,如在Foxpro用'T',MS SQL用'1'。

    false:?數據中假值的表現方式,如在Foxpro用'F',MS SQL用'0'。

    replaceQuote: 這個字串用來處理逸出符號。例如在 Microsoft SQL 里的雙引號,MySQL里的反斜線符號。主要使用于?qstr?。

    autoCommit: 設定是否啟動自動交易模式,預設值為 true。

    charSet: 設定使用的字元集,目前只有 interbase 支持。

    metaTablesSQL: 使用SQL指令,以返回一份可用的數據表清單。例如在 MySQL 里的 SHOW TABLES。

    genID: 如果數據庫有支持的話,這里會存放由GetID()所取得的最后值。

    cacheSecs: 快取數據集的秒數。用于當使用者利用 CacheExecute() 或 CacheSeletLimit() 函數,又沒有設定 $secs2cache 參數時的預設值。

    sysDate: 利用數據庫函數去取得目前的日期和時間。會使用到原生的日期時間標記格式。


    ADOConnection 主要函數

    ADOConnection( )

    建構函數,請不要直接調用,使用 ADONewConnection() 來代替。

    Connect($host,[$user],[$password],[$database])

    對服務器或數據來源 $host?非持續性連接,使用者認證代碼為?$user?,密碼為?$password?,如果服務器支持多數據庫,則指定連接到數據庫$database

    連接成功返回 true , 失敗則返回 false 。

    注意:如果你使用的是 Microsoft ADO,而非 OLEDB,你可以設定?$database?參數為你正在使用的 OLEDB 數據供應器。

    PostgreSQL:另一種選擇性的連接方法是將標準的PostgreSQL連接字串放在?$host?參數里,那么其它的參數都會被呼略。

    對于 Oracle 及 Oci8,有兩個方法可以連接。第一,使用你定義的區域 tnsnames.ora 里的 TNS 名稱,將這個名稱放在?$database?參數里,然后將?$host?設為 false。另一種方法,設定?$host?為服務器,而?$database?則設成數據庫SID ,這將會不透過 tnsnames.ora 連接。

    范例:

    $conn->Connect(false, 'scott', 'tiger', 'name_in_tnsnames'); # 使用 tnsnames.ora $conn->Connect('server:1521', 'scott', 'tiger', 'OracleSID'); # 不使用 tnsnames.ora

    還有許多的數據庫連接范例在網站?php.weblogs.com/ADOdb?以及在本版所附的 testdatabase.inc.php 文件里。

    PConnect($host,[$user],[$password],[$database])

    對服務器或數據來源 $host?持續性連接,使用者認證代碼為?$user?,密碼為?$password?,如果服務器支持多數據庫,則指定連接到數據庫$database

    連接成功返回 true , 失敗則返回 false 。其它數據請參考 Connect()。

    Execute($sql,$inputarr=false)

    執行 SQL 指令?$sql?,如果成功,就返回一個對應的 ADORecordSet 物件。要注意的是這個指令如果執行成功時,一定會返回一個數據集,即使是執行 insert 或 update 指令也一樣。

    返回對應的 ADORecordSet 物件。例如,如果連接的是 mysql ,那么 ADORecordSet_mysql 將會被返回。當SQL指令執行失敗時會返回 false 值。

    $inputarr 參數則用來做為傳入的結合變量。以下是 Oracle 的范例:

    $conn->Execute("SELECT * FROM TABLE WHERE COND=:val", array('val'=> $val));

    另一個例子,使用 ODBC ,以 '?' 符號做為協定。

    $conn->Execute("SELECT * FROM TABLE WHERE COND=?", array($val));

    結合變量(Binding variables)
    變量的結合可以加速SQL指令編譯及快取的速度,產生較佳的效能。目前只有 Oracle 及 ODBC 支持變量結合。 ODBC 類的 ? 結合在不支持的數據庫里,是以模擬的方式來做到的。

    變量結合在 odbc 及 oci8po 驅動程序里的用法。

    $rs = $db->Execute('select * from table where val=?', array('10'));

    變量結合在 oci8 驅動程序里的用法。

    $rs = $db->Execute('select name from table where val=:key',array('key' => 10));

    CacheExecute($secs2cache,$sql,$inputarr=false)

    類似于 Execute 函數,除了將數據集暫存在 $ADODB_CACHE_DIR 指定的目錄里 $secs2cache 秒外。如果 CacheExecute() 被相同的參數、數據庫、使用者ID及密碼,而且快取也沒有過期,那么快取中的數據集將會被傳回。

    include('ADOdb.inc.php'); include('tohtml.inc.php'); $ADODB_CACHE_DIR = '/usr/local/ADOdbcache'; $conn = &ADONewConnection('mysql'); $conn->PConnect('localhost','userid','password','database'); $rs = $conn->CacheExecute(15, 'select * from table'); # 快取15秒 rs2html($rs); /* recordset to html table */

    另外,從ADODB 1.80 版起,$secs2cache 參數成為選擇性(也就是可以不加)

    $conn->Connect(...); $conn->cacheSecs = 3600*24; // cache 24 hours $rs = $conn->CacheExecute('select * from table');

    如果 CacheExecute() 被多次調用,而且數據集也持續在快取中,$secs2cache 參數不會延長被快取的數據集保留時間(因為會被呼略掉),CacheExecute()只能使用在 SELECT 指令上。

    效能備注:曾經作了一些效能測試,并且發現這些快取的效益極為顯著。尤其是在數據庫服務器運作效率慢于WEB服務器或數據庫的負荷非常重的時候。ADODB的快取好在它減少了數據庫服務器的負荷。當然,如果你的數據庫服務器負荷不大,而且運作速度也比WEB服務器快,那快取反而會降低效能。

    SelectLimit($sql,$numrows=-1,$offset=-1,$inputarr=false)

    執行成功會返回一個數據集。完成一個SELECT指令,類似于 PostgreSQL中 SELECT 指令里的LIMIT $numrows OFFSET $offset 宣告。

    在 PostgreSQL,SELECT * FROM TABLE LIMIT 3 將會只傳回從頭開始的三筆記錄。相同的,$connection->SelectLimit('SELECT * FROM TABLE',3)也有同樣的意思。

    而 SELECT * FROM TABLE LIMIT 3 OFFSET 2 將會返回記錄 3,4及5三筆(也就是在記錄2之后,返回三筆記錄)。相同的,在ADODB里是以 $connection->SelectLimit('SELECT * FROM TABLE',3,2) 來做的。

    要注意,LIMIT宣告,在MySQL里是相反位置的。你可以設定 $connection->SelectLimit('select * from table',-1,10) 去取得從第11筆起到最后一筆的記錄。

    最后一個參數 $inputarr 是針對支持變量結合功能的數據庫,像 Oracle oci8。這個大大的減少了 SQL 編譯的負荷。底下是 Oracle 范例:

    $conn->SelectLimit("SELECT * FROM TABLE WHERE COND=:val", 100,-1,array('val'=> $val));

    oci8po 驅動程序(oracle portable driver)使用更為標準的變量結合:

    $conn->SelectLimit("SELECT * FROM TABLE WHERE COND=?", 100,-1,array('val'=> $val));

    Ron Wilson 報告說 SelectLimit 在SQL指令有含 UNION 時會無效,并且建議了針對 mssql 的對策:

    > 事實上,我發現一個可以立即最佳化的建構 Select Union 方法。這適用于 MS-SQL,至于 其它數據庫是否適合,就不確定了。當更新求助檔時,你可以參考這個范例。注意,這個方 法不適用于 MySQL。 > > 改變: > Select column1 From table1 > Union > Select column2 From table2 > > 成為: > Select * From ( > Select column1 From table1 > Union > Select column2 From table2 > ) > As dummytable > > Ron

    CacheSelectLimit($secs2cache, $sql, $numrows=-1,$offset=-1,$inputarr=false)

    類似于 SelectLimit,除了將數據集暫存在 $ADODB_CACHE_DIR 指定的目錄里 $secs2cache 秒外。

    自 1.80版起,$secs2cache成為了選擇性參數:

    $conn->Connect(...); $conn->cacheSecs = 3600*24; // 快取24小時 $rs = $conn->CacheSelectLimit('select * from table',10);

    CacheFlush($sql)

    更新(刪除)以 $sql 指令存放在 $ADODB_CACHE_DIR 指定目錄內的全部快取數據集。如果你企圖更新所有的快取數據集,請執行如下的PHP指令碼(僅針對 Unix 有效):system("rm -f find ".ADODB_CACH_DIR." -name ADODB_*.cache") ;

    ErrorMsg()

    返回最后狀態或是錯誤信息。即使沒有錯誤發生,本函數也會返回一個字串。一般情況下,你不需要調用這個函數,除非ADODB函數因為錯誤狀態返回了false值。

    注意:如果?debug?旗標被啟動了,SQL 錯誤信息將會在Execute函數被調用時發生錯誤后出現。

    ErrorNo()

    返回最后的錯誤號碼。注意一點,舊版本的 PHP(4.0.6以前),不支持ODBC的錯誤編號。一般情況下,你不需要調用這個函數,除非ADODB函數因為錯誤狀態返回了false值。

    GenID($seqName = 'ADOdbseq',$startID=1)

    產生一個順序號碼(在mssql是一個整數值)。對 interbase,mysql,postgresql,oci8,oci8po,ODBC核心類驅動程序(如 access,vfp,db2等等) 都支持。使用 $seqName做為順序名。如果數據庫沒有值,那么GenID()將會自動為你產生一個序號(產生使用者 id 時允許如此),換句話說,你必需自行建立序號。

    如果你的數據庫驅動程序要模擬序號,數據表的名稱就是序號名(sequence name),而這個數據表必需有一個字段"id",而其數據類型為整數,或你需要更大些的 numeric(16)。

    對于沒有支持序號原生功能的ODBC及數據庫(如 mssql,mysql),我們對每一個序號建立一個數據表。如果序號沒有被預先定義,那啟如的號碼值就設定成 $startID。

    注意,mssql驅動程序的 GenID()會產生一個16位元的GUID。自1.90版起,我們將返回整數。

    UpdateBlob($table,$column,$val,$where)

    允許你以 $where 條件保存一個BLOB(存在 $val里的)值到 $table 里的 $column 字段。

    例:

     

    # for oracle $conn->Execute('INSERT INTO blobtable (id, blobcol) VALUES (1, empty_blob())'); $conn->UpdateBlob('blobtable','blobcol',$blobvalue,'id=1'); # non oracle databases $conn->Execute('INSERT INTO blobtable (id, blobcol) VALUES (1, null)'); $conn->UpdateBlob('blobtable','blobcol',$blobvalue,'id=1');

    如果成功,會返回 true ,否則返回 false 值。目前有 MySQL, PostgreSQL, Oci8, Oci8po 及 Interbase 支持。其它驅動程序可能有效,仍在持續開發中。

    要注意,在PHP 4.1.0 以前的版本,當 Interbase的 blob 值被 SELECT 取回值時,它仍需要被解碼,請使用 $connection->DecodeBlob($blob); 以還原它的內容。

    UpdateClob($table,$column,$val,$where)

    允許你以 $where 條件保存一個BLOB(存在 $val里的)值到 $table 里的 $column 字段。類似于 UpdateBlog,但主要針對文字大型文件物件。

    例:

     

    # for oracle $conn->Execute('INSERT INTO clobtable (id, clobcol) VALUES (1, empty_clob())'); $conn->UpdateBlob('clobtable','clobcol',$clobvalue,'id=1'); # non oracle databases $conn->Execute('INSERT INTO clobtable (id, clobcol) VALUES (1, null)'); $conn->UpdateBlob('clobtable','clobcol',$clobvalue,'id=1');

    UpdateBlobFile($table,$column,$path,$where,$blobtype='BLOB')

    如同 UpdateBlob ,但我們將值改成一個文件路徑,將整個文件存入。

    成功返回 true 否則為 false。

    GetUpdateSQL(&$rs, $arrFields, $forceUpdate=false,$magicq=false)

    建立一個 SQL 以更新一個被給予的數據集 $rs ,被修改的字段存放在陣列 $arrFields中(這個陣列必需是具名陣列,字段名為索引,值為修正值),會與原來的數據集做一個比較,如果 $forceUpdate被設為 true,那么即使 $arrFields與 $rs->fields完全相同,也會產生出更新的SQL指令。數據集必需在連接狀態。$magicq 被用于指出魔術引號功能是否被啟動。

    GetInsertSQL(&$rs, $arrFields,$magicq=false)

    建立一個 SQL 以新增一筆記錄到被給予的數據集 $rs。這個查詢必需是在連接狀態。$magicq 被用于指出魔術引號功能是否被啟動。

    PageExecute($sql, $nrows, $page, $inputarr=false)

    使用數據集的頁碼功能,參數 $page 是以 1 為啟使值,請參考范例 8.

    CachePageExecute($secs2cache, $sql, $nrows, $page, $inputarr=false)

    使用數據集的頁碼功能,參數 $page 是以 1 為啟使值,請參考范例 8.PageExecute 的快取版。

    Close( )

    關閉數據庫的連接。PHP4 以數據庫連接結束時不需要特別去清除而享有盛名,因為其參考計數機制會自動幫我們清除掉。

    BeginTrans( )

    啟始一筆交易。會關閉自動結案功能。執行成功會返回 true 。如果不支持交易功能,部份數據庫會一直傳回 false 值。Interbase,Oracle 及 MSSQL 支持交易機制。請注意,因為 PHP 4.02 版的臭蟲,交易支持在微軟的 ADO 上是無效的。你必需使用你關連式數據庫的原生交易支持功能。當連接結束時,任何開啟的交易都會被還原。

    CommitTrans( )

    成功的結束一次交易。如果成功,返回 true。如果數據庫并不支持交易功能,那么就只會傳回 true ,以表示數據總是交易成功的。

    RollbackTrans( )

    結束一次交易,恢復所有改變。執行成功會返回 true 。如果數據庫并不支持交易功能,那么就只會傳回 false ,以表示數據總是不能恢復。

    GetOne($sql)

    Executes the SQL and returns the first field of the first row as an array. The recordset and remaining rows are discarded for you automatically. If an error occur, false is returned.

    執行SQL指令,并且以陣列的方式返回第一筆記錄的第一個字段。數據集及其馀的記錄將會被自動清除,如果發生錯誤,就返回 false 值。

    譯者注:這個功能在驗證某筆記錄在不在特別有用,可以減少系統內存及資源的用量。

    GetRow($sql)

    執行SQL指令,并且以陣列的方式返回第一筆記錄。數據集及其馀的記錄將會被自動清除,如果發生錯誤,就返回 false 值。

    Prepare($sql )

    預先編譯一個SQL查詢,以便于重覆執行。如果有任何語法錯誤,Prepare()不會顯示任合錯誤,但允許 Execute() 去取得及顯示錯誤。內部實作支持 interbase ,oci8 及選擇性的 ODBC-based 驅動程序。其馀的都是以模擬的方式支持。在模擬的情況下,使用 Prepare() 對效能的增進沒有任何效果。

    返回一個包含了原始描述為第一個陣列元素的陣列,其馀的元素內容則視驅動程序而定。如果有錯誤或是模擬方式的 Prepare(),會返回原來的 $sql 字串。那是因為所有的錯誤處理都被集中到 Execute() 里去了。

    范例 :

    $stmt = $DB->Prepare('insert into table (col1,col2) values (?,?)'); for ($i=0; $i < $max; $i++) $DB->Execute($stmt,array((string) rand(), $i));

    PrepareSP($sql)

    在 mssql 驅動程序里,預編譯預儲程序必需要透過一個特別的函數來調用 mssql_init(),這個動作目前由本函數來處理了。PrepareSP() 可以在所有的驅動程序由被調用,而且以調用 Prepare() 的方式來模擬。使用范例請參考以下的 Parameter() 說明。

    和上面的 Prepare() 返回一樣的陣列或 $sql 字串。

    Parameter($stmt, $var, $name, $isOutput=false, $maxLen = 4000, $type = false )

    在運作中增加一個結合參數。目前相容于 Microsoft SQL 及 Oracle oci8。以下是參數說明:


    $stmt? 由 Prepare() 或 PrepareSP() 返回的指令。
    $var?要結合的 PHP 變量。
    $name?要結合的預儲程序的變量名。
    [$isOutput] 設定參數傳導的方向,0/false = IN 1=OUT 2= IN/OUT 。 在 oci8 中這個參數會被忽略,因為驅動程序會自動偵測。?
    [$maxLen] 參數變量的最大長度。
    [$type] 參考?mssql_bind?及?ocibindbyname?在 PHP.NET 的文件說明以取得更多正確值的信息。

    在 mssql,$opt 可以被下列的元素所影響:mssql_bind?and?ocibindbyname?。 例如 ;

    # @RETVAL = SP_RUNSOMETHING @myid,@group $stmt = $db->PrepareSP('SP_RUNSOMETHING'); # note that the parameter name does not have @ in front! $db->Parameter($stmt,$id,'myid'); $db->Parameter($stmt,$group,'group',false,64); # return value in mssql - RETVAL is hard-coded name $db->Parameter($stmt,$ret,'RETVAL',true); $db->Execute($stmt);

    一個 oci8 的例子:

    # 對于 oracle, Prepare 及 PrepareSP 是相同的 $stmt = $db->PrepareSP( "declare ret integer; begin :RETVAL := SP_RUNSOMETHING(:myid,:group); end;"); $db->Parameter($stmt,$id,'myid'); $db->Parameter($stmt,$group,'group',false,64); $db->Parameter($stmt,$ret,'RETVAL',true); $db->Execute($stmt);

    請注意,在 oci8 及 mssql 間只有語法上的不同,那是各數據庫實作 SQL 語法問題,ADODB 對于這一部份無能為力。

    如果 $type 參數被設定成 false 。在 mssql ,$type 將會動態的由 PHP 變量傳來的類型決定(string => SQLCHAR, boolean =>SQLINT1, integer =>SQLINT4 或? float/double=>SQLFLT8),在 oci8,$type 可以被設成 OCI_B_FILE (Binary-File), OCI_B_CFILE (Character-File), OCI_B_CLOB (Character-LOB), OCI_B_BLOB (Binary-LOB) 及 OCI_B_ROWID (ROWID)。如果要傳入空值,使用? $db->Parameter($stmt, $null=null, 'param')。

    最后,在 oci8,結合參數可以重覆被使用,而無需再一次調用 PrepareSP() 或 Parameters。但這對 mssql 是不行的。一個 oci8 的范例如下:

    $id = 0; $i = 0; $stmt = $db->PrepareSP( "update table set val=:i where id=:id"); $db->Parameter($stmt,$id,'id'); $db->Parameter($stmt,$i, 'i'); for ($cnt=0; $cnt < 1000; $cnt++) { $id = $cnt; $i = $cnt * $cnt; # oci8 下可以運作 $db->Execute($stmt); }

    Bind($stmt, $var, $size=4001, $type=false, $name=false)

    這是一個低階函數,只有 oci8 驅動程序支持。只有你確定系統僅支持 Oracle 否則請避免使用它。Parameter() 函數是使用結合變量的另一個建議方式。

    Bind() 允許你使用結合變量在你的 sql 敘述中。這里結合一個PHP變量給一個在之前被 Prepare() 預先編譯的 Oracle sql 敘述里定義的名稱。Oracle 以一個冒號為開頭來命名一個變量,而且 ADODB 需要一個被命名的變量去對應 :0,:1,:2,:3,等等。第一次被 Bind() 取得的將會代入 :0,而第二次將會代入 :1,依此類推。對 insert , select 及 update 指令,結合可以提供 100% 的效能提升。

    在其馀的參數里,$size 設定數據保存的暫存區大小,$type 是 OCI_B_FILE (Binary-File), OCI_B_CFILE (Character-File), OCI_B_CLOB (Character-LOB), OCI_B_BLOB (Binary-LOB) 及 OCI_B_ROWID (ROWID) 的類別選項。最后,代替使用預設的 :0,:1 等等名稱,你可以使用 $name 來定義你自己的連接名稱。

    接下來的例子展示3個連接變量,使用 p1,p2及p3來結合。這些變量將會配到 :0 , :1 及 :2 。

    $stmt = $DB->Prepare("insert into table (col0, col1, col2) values (:0, :1, :2)"); $DB->Bind($stmt, $p1); $DB->Bind($stmt, $p2); $DB->Bind($stmt, $p3); for ($i = 0; $i < $max; $i++) { $p1 = ?; $p2 = ?; $p3 = ?; $DB->Execute($stmt); }

    你也可以使用名稱變量:

    $stmt = $DB->Prepare("insert into table (col0, col1, col2) values (:name0, :name1, :name2)"); $DB->Bind($stmt, $p1, "name0"); $DB->Bind($stmt, $p2, "name1"); $DB->Bind($stmt, $p3, "name2"); for ($i = 0; $i < $max; $i++) { $p1 = ?; $p2 = ?; $p3 = ?; $DB->Execute($stmt); }

    ADOConnection 公用函數

    BlankRecordSet([$queryid])

    不再使用,本版已移除。

    Concat($s1,$s2,....)

    產生一個結合 $s1,$s2,..等 sql 字串的字串,使用了在 concat_operator 字段定義的結合運算符號。如果結合運算符號不被使用,那這個函數將無效,例如 MySQL 。

    本函數返回含結合符號的字串。

    DBDate($date)

    格式化?$date?成數據庫可以接收的格式,這可以是一個 Unix 整數時間記錄格式或是一個 ISO 格式的 Y-m-d。使用 fmtDate 字段所定義的格式。如果傳入的是 null 或是 false 或是 '' ,那將會轉成一個 SQL 的 null。

    返回一個日期字串。

    DBTimeStamp($ts)

    格式化時間記錄格式的?$ts?成數據庫可接受的格式。這可以是一個 Unix 整數時間記錄格式或是一個 ISO 格式的 Y-m-d。使用 fmtDate 字段所定義的格式。如果傳入的是 null 或是 false 或是 '' ,那將會轉成一個 SQL 的 null。

    返回一個時間字串。

    qstr($s,[$magic_quotes_enabled=false])

    將一個字串放在引號內,以送到數據庫中。$magic_quotes_enabled?參數可能看起來很有趣,但這個想法是假設你已經用一個引號來處理了從 POST/GET 變量取來的字串后,然后以 get_magic_quotes_gpc() 做為第二個參數。這會確定這個變量不會被引號處理二次,一次被?qstr?處理,一次被?magic_quotes_gqc。

    例如:? $s = $db->qstr(HTTP_GET_VARS['name'],get_magic_quotes_gpc());

    返回值是一個被引號處理過的字串。

    Affected_Rows( )

    返回被SQL指令更新或被刪除掉的數據筆數。如果數據庫不支持,返回一個 false 值。

    目前 interbase/firebird 不支持本函數。

    Insert_ID( )

    返回最后插入時的自動增進值 ID。如果系統不支持,返回 false。

    只支持有提供自動增進或物件 ID 的數據庫,目前像是 PostgreSQL, MySQL 以及 MSSQL 都有。PostgreSQL 返回一個 OID,可以在數據庫重載入時改變。只有使用持續連接方式,當你完成一筆交易時,這個函數才會有精確的結果。這是因為被 Execute() 宣告的連接可能和下一個 Execute() 時用的連接不同。

    MetaDatabases()

    返回一個在服務器中的數據庫清單于陣列里。首先你必需連接到服務器。目前只支持 ODBC, MySQL 及 ADO。

    MetaTables()

    返回目前數據庫中全部數據表名稱于一個陣列中。如果可能,這個陣列將會排除系統目錄數據表。

    MetaColumns($table)

    返回一個 ADOFieldObject 的陣列,一個字段物件對應到一個 $table 的所有行。目前 Sybase 不能辨別數據類型,ADO 不能辨識正確的數據類型(所以我們預設為 varchar)..

    MetaColumnNames($table)

    返回 $table 的行名于一個陣列中。


    ADORecordSet(數據集)

    當一個SQL指令成功的被 ADOConnection->Execute($sql)執行后,一個 ADORecordSet 物件會被返回回來。這個物件提供了一個虛擬的指標,所以我們可以移動它,從一筆到一筆。也提供一些函數,以取得字段信息和字段類別,并有協助函數去格式化結果,以展示給使用者看。

    ADORecordSet 屬性

    fields:?包含了目前記錄的陣列。不是關連式陣列,但它的索引值是從 0 到 字段數 - 1。請參考函數 Fields ,這個函數的動作就像是一個關連式陣列。

    dataProvider: 連接數據庫的底層機制,正常設定為?native?,除非是使用?odbc?或?ado?。

    blobSize: 一個 char , string 或者 varchar object 在被轉成 Blob 前的最大長度(Blob 在顯示時應該使用 textarea)。其它請參考?MetaType?函數。

    sql: 保存了建立本數據集所使用的 sql 指令。

    canSeek: 如果 Move() 函數有作用,會被設成 true 。

    EOF: 當指標被移動到最后一筆時,這個值會被設定成 true 。

    ADORecordSet 函數

    ADORecordSet( )

    建構函數。一般來說你不需要自己調用這個函數。

    GetAssoc([$force_array])

    如果字段數大于 2 ,那么從數據集中產生一個關連式陣列。這個陣列是從目前的指標起一直到檔尾(EOF)。這個數據集的第一個字段會成為陣列的索引。如果字段數剛好是2,當這陣列被每一個鍵值所建立時,那么索引會直接對應到值,除非? $force_array 被設成 true 。

    范例:

    以下是我們數據集的數據:

    列1: Apple, Fruit, Edible
    列2: Cactus, Plant, Inedible
    列3: Rose, Flower, Edible

    GetAssociation 將會產生一個如下的關聯式陣列:

    Apple => [Fruit, Edible]
    Cactus => [Plant, Inedible]
    Rose => [Flower,Edible]

    返回值:

    關連式陣列,錯誤則傳回 false 。

    GetArray([$number_of_rows])

    從目前指標位置產生一個陣列,索引值從 0 到 $number_of_rows - 1 。如果 $number_of_rows 沒有被定義,那會到檔尾(EOF)。

    GetRows([$number_of_rows])

    是 GetArray() 的同義函數,是為了與 Microsoft ADO 相容才有的。

    GetMenu($name, [$default_str=''], [$blank1stItem=true], [$multiple_select=false], [$size=0], [$moreAttr=''])

    建立一個 HTML 選單? (<select><option><option></select>) 。數據集的第一欄 (fields[0]) 將會作為 <option> 里的顯示字串。如果數據集有超過一個以上的字段,第二欄 (fields[1]) 將設定成返回給WEB服務器的值(即 value)。選單將被給予 $name 為名稱。

    如果 $default_str 被定義了,那么如果 $default_str == fields[0] , 那么這個字段將會被選取。 如果 $blank1stItem 為 true ,那第一個選項將會是空值。$Default_str 在對于可多選清單盒時,可以是一個陣列。

    要產生一個選單區,設定 $size 為一個非 0 值(或者傳入 $default_str 為一個陣列)。如果 $multiple_select 為 true ,那么一個選單區將會被產生成有 $size 個項目可見的選單(如果 $size ==? 0 那預設為 5 個),而且ADODB將會返回一個陣列給服務器。最后,你可以使用 $moreAttr 去增加其它的屬性,像是 javascript 或樣式表。

    選單范例 1:?GetMenu('menu1','A',true)?將會產生一個像這樣的選單 : A B C 這里的數據 (A,1), (B,2), (C,3). 請參考?范例 5?。

    選單范例 2: 相同的數據,?GetMenu('menu1',array('A','B'),false)?將會產生一個 A 及 B 被選取的選單 : A B C

    GetMenu2($name, [$default_str=''], [$blank1stItem=true], [$multiple_select=false], [$size=0], [$moreAttr=''])

    近似于 GetMenu ,除了 $default_str 將會和 fields[1] 做比對也就是選項值。

    選單范?3: 給予在范例 2 里的數據 ,?GetMenu2('menu1',array('1','2'),false)?將會產生一個選單,A及B將會被選取。然而,這一次的被選取的比對基準是第二個字段,也就是存放要被返回給服務器里的值。

    UserDate($str, [$fmt])

    轉換日期字串 $str 為另一個格式,UserDate 調用 UnixDate 來解譯 $str ,而 $fmt 預設值是 Y-m-d 。

    UserTimeStamp($str, [$fmt])

    轉換時間字串 $str 為另一個格式,時間字串格式是 Y-m-d H:i:s , 像是 "2002-02-28 23:00:12"。UserTimeStamp 調用 UnixTimeStamp 來解譯 $str ,而 $fmt 預設值為 Y-m-d H:i:s 。

    UnixDate($str)

    將日期字串 $str 解譯,并且轉換成 unix mktime 格式(從 1970.01.01 00:00:00 起到現在的秒數)后傳回。預設日期是以 Y-m-d H:i:s 格式來傳入的。而對于 Sybase 及 Microsoft SQL Server 而言 M d Y 也是可以接受的(三個字元的月份表示法是被一個全域陣列所控制的,這個部份可能需要在地化 )。

    自 1.91 版起,這個函數存在于 ADORecordSet 及 ADOConnection兩個地方。

    UnixTimeStamp($str)

    將時間字串 $str 解譯,并且轉換成 unix mktime 格式(從 1970.01.01 00:00:00 起到現在的秒數)后傳回。預設日期是以 Y-m-d H:i:s 格式來傳入的。而對于 Sybase 及 Microsoft SQL Server 而言 M d Y 也是可以接受的(三個字元的月份表示法是被一個全域陣列所控制的,這個部份可能需要在地化 )。

    自 1.91 版起,這個函數存在于 ADORecordSet 及 ADOConnection兩個地方。

    MoveNext( )

    移動內部指標到下一筆,fields?陣列將會自動的更新。如果不能移動,會返回 false 值,其它情況則會返回 true 。

    范例 :

    $rs = $db->Execute($sql); if ($rs) while (!$rs->EOF) { ProcessArray($rs->fields); $rs->MoveNext(); }

    Move($to)

    移動內部指標到指定的列 ($to) 。 列數是零基的,例如,0是第一列。fields 陣列將會自動更新。對于不支持內部卷動的數據庫,ADODB將會自動模擬卷動。部份數據庫不支持向后卷動。對大多數的數據庫言,如果 $to 的位置在 EOF 之后,$to 將會被移動到數據集的最后一筆。有些無名的數據庫使用 odbc 時,可能會沒有動作。

    注意:這個函數使用了絕對定址,不像 Microsoft 的 ADO。

    返回值是 true 或是 false。如果是 false ,這個內部指標在大多數的實際運作上并沒有移動,所以 AbsolutePosition() 將會返回指標在執行 Move() 之前最后的位置

    MoveFirst()

    實際上是調用 Move(0) 。注意,有一些數據庫并不支持這個函數。

    MoveLast()

    實際上是調用 Move(RecordCount() - 1)。注意,有一些數據庫并不支持這個函數。

    GetRowAssoc($toUpper=true)

    這個函數并不能持續的以理想的方式維持關連陣列的內容(每換一筆記錄,就要重新執行一次)。使用?$ADODB_FETCH_MODE?共用變量來替代它。

    返回一個包含了目前記錄的關連式陣列,陣列的索引值就是字段名。字段名全都是大寫的,以便存取。要取得下一筆記錄,你要調用 MoveNext() 。

    范例 :
    Array ( [ID] => 1 [FIRSTNAME] => Caroline [LASTNAME] => Miranda [CREATED] => 2001-07-05 )

    注意:不要同時使用 GetRowAssoc() 和 $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC 。因為他們有相同的功能,會彼此交互干擾。

    AbsolutePage($page=-1)

    返回目前的頁碼,需要先調用 PageExecute() / CachePageExecute() 。參考?Example 8?。

    AtFirstPage($status='')

    如果在第一頁,返回 true (1基式),需要先調用 PageExecute() / CachePageExecute() 。參考?Example 8?。

    AtLastPage($status='')

    如果在最后一頁,返回 true (1基式),需要先調用 PageExecute() / CachePageExecute() 。參考?Example 8?。

    Fields($colname)

    不鼓勵使用,請改以?$ADODB_FETCH_MODE?取代。

    當使用原生函數庫時,有些數據庫函數返回具名及索引雙陣列(如 MySQL)。GetRowAssoc() 并不返回結合了具名及索引的陣列元素。

    本函數返回由 $colname 所指欄名,在目前記錄里的的字段值。

    字段名區分大小寫。

    FetchRow()

    返回目前記錄內容的陣列,如果是檔尾(EOF),返回 false 。注意:不要把 FetchRow 和 MoveNext() 混用。

    用法 :

    $rs = $db->Execute($sql); if ($rs) while ($arr = $rs->FetchRow()) { # process $arr }

    FetchInto(&$array)

    設定 $array 到目前的記錄里。如果在檔尾(EOF),返回 PEAR_Error 物件。如果成功,返回 1 (DB_OK 常數)。

    如果 PEAR 未定義,當 EOF 時返回 false 。FetchRow() 很容易使用,請參考之前的例子。

    FetchField($column_number)

    返回一個物件,包含了所指字段的名稱,類別及最大長度。如果最大長度不能被明確決定,將會返回 -1 。 行號是以 0 基為計算起點的,請參考?范例 2?。

    FieldCount( )

    返回數據集里字段數。

    RecordCount( )

    返回數據集里的記錄筆數。如果無法從數據庫驅動程序API里取得正確的數字,ADODB將會把所有的記錄內容,存放在內存里,等全部取完后,再返回記錄總筆數。這個內存可以藉由設定全域變量 $ADODB_COUNTERECS = false 而被取消(基于執行效能的理由)。當取消后,對某些數據庫,RecordCount() 將會返回 -1 。相關支持狀況,請參考前面的數據庫支持表有詳細的說明。

    RowCount 和 RecordCount 是同義函數。

    PO_RecordCount($table, $where)

    返回在數據集里的記錄筆數。如果數據庫不支持,那么將返回對 $table 數據表下達以 $where 為條件的 SELECT COUNT(*) 指令后返回的值。

    $numrows = $rs->PO_RecordCount("articles_table", "group=$group");

    會返回數據庫執行 SELECT COUNT(*) FROM articles_table WHERE group=$group 的結果。

    FetchObject($toupper=true)

    返回目前的記錄為一個物件。如果 $toupper 為 true ,那么物件字段名將會設為大寫。注意:較新的 FetchNextObject() 是取得記錄物件較被建議的方式,請參看后續說明。

    FetchNextObject($toupper=true)

    取得目前的記錄成一個物件,并且自動移動到下一個記錄。如果在檔尾,返回 false 。如果 $toupper 為 true ,那么物件字段名將會設為大寫。

    $rs = $db->Execute('select firstname,lastname from table'); if ($rs) { while ($o = $rs->FetchNextObject()) { print "$o->FIRSTNAME, $o->LASTNAME<BR>"; } }

    在使用 FetchNextObject() 時會影響效能,如果效能很重要,你應該使用 fields[] 陣列來存取。

    CurrentRow( )

    目傳目前數據集的記錄編號,0 表示是第一筆。

    AbsolutePosition( )

    和 CurrentRow 是相同的函數,是為了和 ADO 相容而存在的。

    MetaType($nativeDBType[,$field_max_length],[$fieldobj])

    設定資生數據庫里的原生類型 $nativeDBType?為那一種通用數據類型,以及它的最大長度。請注意,如果長度未知,可以設為 -1 。字段物件可以使用?$fieldobj?傳入。這對于像是 mysql 這一類字段物件有較多屬性的數據庫來說,是很有用的。

    使用字段?blobsize?及比較?$field_max_length?去決定目前的字段是否為 blob 。

    返回值:

    • C:? character 字段,應該使用 <input type="text"> 標記來取值。

    • X: 文字字段(Text) , 長文字字段,使用 <textarea> 標記來顯示數據。

    • B: Blob 字段或者大型的二位元物件(像程序,圖檔等)。

    • D: 日期字段

    • T: 時間字段

    • L: 邏輯字段(真假值)或位元字段

    • N: 數字字段,包含自動進位、編號、整數、浮點數、實數等。

    • I: 整數字段

    • R: 序列字段,包含了序列、自動增進整數,只對被選擇的數據庫作用。

    Close( )

    關閉目前的數據集。


    function rs2html($adorecordset,[$tableheader_attributes], [$col_titles])

    這是一個獨立的函數 (rs2heml = recordset to html) ,相當于 PHP 中的 odbc_result_all 函數。本函數會輸出一整個 ADORecordSet,$adorecordset?如同一個 HTML表格。$tableheader_attributes?允許你控制表格里的參數如 cellpadding,cellspacing 及 border 等的屬性。最后,你可以透過 $col_titles?陣列,更換數據庫字段名稱,使用你自己的字段抬頭。這是設計用來快速除錯的機制,不是一個好的表格記錄瀏覽器。

    要使用這個函數,你必需引入 tohtml.inc.php 。

    rs2html 范例:

    <? include('tohtml.inc.php'); # load code common to ADOdb include('ADOdb.inc.php'); # load code common to ADOdb $conn = &ADONewConnection('mysql'); # create a connection $conn->PConnect('localhost','userid','','agora');# connect to MySQL, agora db $sql = 'select CustomerName, CustomerID from customers'; $rs = $conn->Execute($sql); rs2html($rs,'border=2 cellpadding=3',array('Customer Name','Customer ID')); ?>
    ?
    轉自 :?http://blog.csdn.net/heiyeshuwu/article/details/400140

    轉載于:https://www.cnblogs.com/chrdai/p/7047235.html

    總結

    以上是生活随笔為你收集整理的ADODB 手册的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    六月丁香婷婷色狠狠久久 | 麻豆人妻少妇精品无码专区 | 国产精品免费大片 | 99久久婷婷国产综合精品青草免费 | 精品国产一区二区三区av 性色 | 国产乡下妇女做爰 | 国产精品久久久久影院嫩草 | 国产成人一区二区三区别 | 国产乱人伦偷精品视频 | 激情五月综合色婷婷一区二区 | 亚洲午夜福利在线观看 | 日日摸日日碰夜夜爽av | 国产精品va在线播放 | 久久zyz资源站无码中文动漫 | 国产乱人伦av在线无码 | 领导边摸边吃奶边做爽在线观看 | 成人影院yy111111在线观看 | 清纯唯美经典一区二区 | 精品人人妻人人澡人人爽人人 | 精品欧洲av无码一区二区三区 | 日本肉体xxxx裸交 | 一本精品99久久精品77 | yw尤物av无码国产在线观看 | 人妻少妇精品无码专区二区 | 亚洲日韩av一区二区三区中文 | 久久综合香蕉国产蜜臀av | 国产精品第一国产精品 | 精品水蜜桃久久久久久久 | 免费人成在线观看网站 | 东京热一精品无码av | 自拍偷自拍亚洲精品被多人伦好爽 | 好男人www社区 | 好爽又高潮了毛片免费下载 | 国产一区二区不卡老阿姨 | 久久99精品久久久久久 | 国产成人精品优优av | 人妻与老人中文字幕 | 蜜臀aⅴ国产精品久久久国产老师 | 成人免费视频在线观看 | 老司机亚洲精品影院无码 | 久久国产精品二国产精品 | 思思久久99热只有频精品66 | 无码国内精品人妻少妇 | 国产精品99爱免费视频 | 奇米影视7777久久精品 | 学生妹亚洲一区二区 | 国产乱人伦偷精品视频 | 亚洲国产精华液网站w | 亚洲乱码中文字幕在线 | 大地资源中文第3页 | 人妻少妇精品久久 | 亚洲综合精品香蕉久久网 | 亚洲综合无码久久精品综合 | 国产av人人夜夜澡人人爽麻豆 | 男人的天堂av网站 | 久久精品99久久香蕉国产色戒 | 久久综合香蕉国产蜜臀av | 性欧美大战久久久久久久 | 亚洲欧美国产精品专区久久 | 午夜福利不卡在线视频 | 亚洲精品国产精品乱码不卡 | 少妇无套内谢久久久久 | 国产高清av在线播放 | 亚洲成a人片在线观看日本 | 色综合视频一区二区三区 | 大乳丰满人妻中文字幕日本 | 国产成人亚洲综合无码 | 亚洲第一无码av无码专区 | 国产在线精品一区二区三区直播 | 国产亚洲欧美在线专区 | 欧洲熟妇色 欧美 | 久久久久久亚洲精品a片成人 | 丰满少妇人妻久久久久久 | 2019nv天堂香蕉在线观看 | 亚洲精品一区二区三区在线观看 | 性色欲网站人妻丰满中文久久不卡 | 精品无码一区二区三区的天堂 | 精品一区二区不卡无码av | 久久国产精品偷任你爽任你 | 亚洲日韩av一区二区三区中文 | 日本乱偷人妻中文字幕 | 女人被男人爽到呻吟的视频 | 亚洲精品一区二区三区大桥未久 | 日韩欧美中文字幕在线三区 | 色欲av亚洲一区无码少妇 | 色综合视频一区二区三区 | 牲欲强的熟妇农村老妇女视频 | 久久午夜无码鲁丝片午夜精品 | 国产人妻人伦精品 | 中国女人内谢69xxxxxa片 | 国产无遮挡又黄又爽免费视频 | 中国女人内谢69xxxx | 精品成在人线av无码免费看 | 国产香蕉97碰碰久久人人 | 蜜臀av无码人妻精品 | 国产va免费精品观看 | 国产内射老熟女aaaa | 无码任你躁久久久久久久 | 成人性做爰aaa片免费看不忠 | 99麻豆久久久国产精品免费 | 亚洲国产精品美女久久久久 | 精品午夜福利在线观看 | 亚洲成a人片在线观看无码3d | 无码纯肉视频在线观看 | 伊在人天堂亚洲香蕉精品区 | 久热国产vs视频在线观看 | 国产美女精品一区二区三区 | 日韩少妇内射免费播放 | 国内精品人妻无码久久久影院 | 亚洲国产成人av在线观看 | 又紧又大又爽精品一区二区 | 精品一区二区三区波多野结衣 | 午夜熟女插插xx免费视频 | 国产激情艳情在线看视频 | 性生交片免费无码看人 | 狠狠色噜噜狠狠狠狠7777米奇 | 性史性农村dvd毛片 | 无码成人精品区在线观看 | 夜先锋av资源网站 | av无码久久久久不卡免费网站 | 熟妇激情内射com | 久久久久成人片免费观看蜜芽 | 亚拍精品一区二区三区探花 | 东北女人啪啪对白 | 久久午夜无码鲁丝片 | 99久久人妻精品免费一区 | 欧美喷潮久久久xxxxx | 国内精品久久久久久中文字幕 | 97久久精品无码一区二区 | 又紧又大又爽精品一区二区 | 亚洲大尺度无码无码专区 | 亚洲国产精品久久久久久 | 国产真人无遮挡作爱免费视频 | 双乳奶水饱满少妇呻吟 | 国产小呦泬泬99精品 | 久久99国产综合精品 | 欧美兽交xxxx×视频 | 日韩av无码一区二区三区不卡 | 国产午夜精品一区二区三区嫩草 | 黑人巨大精品欧美黑寡妇 | 成人无码视频在线观看网站 | 7777奇米四色成人眼影 | 欧美zoozzooz性欧美 | 亚洲啪av永久无码精品放毛片 | 精品水蜜桃久久久久久久 | 啦啦啦www在线观看免费视频 | 午夜精品一区二区三区的区别 | 久久久精品456亚洲影院 | 成 人 免费观看网站 | 内射巨臀欧美在线视频 | 丰满少妇人妻久久久久久 | 亚洲国产精品一区二区美利坚 | 亚洲狠狠色丁香婷婷综合 | 大屁股大乳丰满人妻 | 精品国精品国产自在久国产87 | 久9re热视频这里只有精品 | 亚洲va中文字幕无码久久不卡 | 国产三级精品三级男人的天堂 | 亚洲人成网站在线播放942 | 亚洲第一网站男人都懂 | 黑人粗大猛烈进出高潮视频 | 国产精品久久国产三级国 | 亚洲一区二区三区在线观看网站 | 强开小婷嫩苞又嫩又紧视频 | 午夜精品一区二区三区在线观看 | 蜜桃视频韩日免费播放 | 扒开双腿疯狂进出爽爽爽视频 | 日日鲁鲁鲁夜夜爽爽狠狠 | 波多野结衣av在线观看 | 水蜜桃色314在线观看 | 人妻插b视频一区二区三区 | 亚洲日本va午夜在线电影 | 内射白嫩少妇超碰 | 日本熟妇浓毛 | 久久国语露脸国产精品电影 | 国产热a欧美热a在线视频 | 日韩av无码中文无码电影 | 377p欧洲日本亚洲大胆 | 岛国片人妻三上悠亚 | 久精品国产欧美亚洲色aⅴ大片 | 国精品人妻无码一区二区三区蜜柚 | 性欧美熟妇videofreesex | 丁香花在线影院观看在线播放 | 国产疯狂伦交大片 | 久久熟妇人妻午夜寂寞影院 | 国产色精品久久人妻 | 99riav国产精品视频 | 日韩成人一区二区三区在线观看 | 国产精品久免费的黄网站 | 亚洲aⅴ无码成人网站国产app | 丰腴饱满的极品熟妇 | 少妇性l交大片 | 波多野结衣高清一区二区三区 | 日韩精品久久久肉伦网站 | 国内老熟妇对白xxxxhd | 国産精品久久久久久久 | 欧美成人午夜精品久久久 | 亚洲男人av香蕉爽爽爽爽 | 国产亚洲精品久久久久久国模美 | 国产精品对白交换视频 | 亚洲精品午夜国产va久久成人 | 领导边摸边吃奶边做爽在线观看 | 精品国产乱码久久久久乱码 | 色综合视频一区二区三区 | 亚洲日韩一区二区三区 | 久久久国产精品无码免费专区 | 中国女人内谢69xxxxxa片 | 国产精品福利视频导航 | 日韩 欧美 动漫 国产 制服 | 爱做久久久久久 | 无码av岛国片在线播放 | 久青草影院在线观看国产 | 人妻尝试又大又粗久久 | 精品无人区无码乱码毛片国产 | 久久国产精品偷任你爽任你 | 欧美日本精品一区二区三区 | 日韩 欧美 动漫 国产 制服 | 久久久久久久人妻无码中文字幕爆 | 国产av人人夜夜澡人人爽麻豆 | 特级做a爰片毛片免费69 | 国产免费久久精品国产传媒 | 国产精品久久久久影院嫩草 | 国产精品久久久久久亚洲毛片 | 国产免费观看黄av片 | 97夜夜澡人人双人人人喊 | 中文字幕无码人妻少妇免费 | 色欲久久久天天天综合网精品 | 人人妻人人澡人人爽人人精品浪潮 | 欧美精品无码一区二区三区 | 狂野欧美激情性xxxx | 日韩精品无码一本二本三本色 | 奇米影视7777久久精品人人爽 | 久久zyz资源站无码中文动漫 | 欧美黑人性暴力猛交喷水 | 色综合久久久无码中文字幕 | 国产激情艳情在线看视频 | 亚洲综合伊人久久大杳蕉 | 午夜丰满少妇性开放视频 | 中文字幕无码人妻少妇免费 | 欧美人与禽zoz0性伦交 | 国产农村妇女高潮大叫 | 青青青手机频在线观看 | 国产精品久久久久久亚洲毛片 | 毛片内射-百度 | 欧美人与禽猛交狂配 | 97久久超碰中文字幕 | 国产色视频一区二区三区 | 日韩人妻少妇一区二区三区 | 欧美老妇交乱视频在线观看 | 欧美性生交活xxxxxdddd | 国产亚洲精品久久久久久久 | 亚洲性无码av中文字幕 | 少女韩国电视剧在线观看完整 | 少妇厨房愉情理9仑片视频 | 青青青爽视频在线观看 | av人摸人人人澡人人超碰下载 | 午夜时刻免费入口 | 国产热a欧美热a在线视频 | 国产精品亚洲五月天高清 | 国产精品美女久久久久av爽李琼 | 国产黑色丝袜在线播放 | a片免费视频在线观看 | 久久精品国产亚洲精品 | 中文字幕人妻无码一区二区三区 | 麻豆国产97在线 | 欧洲 | 欧美猛少妇色xxxxx | 国产高清不卡无码视频 | 中文字幕av伊人av无码av | 午夜理论片yy44880影院 | 久久精品人人做人人综合 | 亚洲精品中文字幕 | 无码国产激情在线观看 | 图片小说视频一区二区 | 美女极度色诱视频国产 | 国产办公室秘书无码精品99 | 欧美性黑人极品hd | 国产真实乱对白精彩久久 | 国产精品第一区揄拍无码 | 久久97精品久久久久久久不卡 | 在线视频网站www色 | 岛国片人妻三上悠亚 | 国产精品内射视频免费 | 国产乱人伦av在线无码 | 中文字幕无码免费久久9一区9 | 国产精品亚洲专区无码不卡 | 欧美日本精品一区二区三区 | 成人女人看片免费视频放人 | 免费播放一区二区三区 | 国产精品福利视频导航 | 国产农村妇女高潮大叫 | 色五月五月丁香亚洲综合网 | 久久久无码中文字幕久... | 午夜成人1000部免费视频 | 欧美三级不卡在线观看 | 国产sm调教视频在线观看 | 国产在线一区二区三区四区五区 | 日韩精品一区二区av在线 | 国产在线精品一区二区高清不卡 | 99国产精品白浆在线观看免费 | 青草青草久热国产精品 | 激情爆乳一区二区三区 | 国产成人综合美国十次 | 欧美日本免费一区二区三区 | 精品久久久无码中文字幕 | 狂野欧美性猛xxxx乱大交 | 久久久久久国产精品无码下载 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 亚洲欧洲日本无在线码 | 久久人妻内射无码一区三区 | 精品成人av一区二区三区 | 国产精品99久久精品爆乳 | 日本丰满护士爆乳xxxx | 激情人妻另类人妻伦 | 亚洲精品欧美二区三区中文字幕 | 牲欲强的熟妇农村老妇女 | 日本精品人妻无码免费大全 | 国产激情精品一区二区三区 | www一区二区www免费 | 欧美日韩一区二区免费视频 | av香港经典三级级 在线 | 国产精品igao视频网 | 成人免费视频在线观看 | 亚洲国产精品久久久天堂 | 久久国产自偷自偷免费一区调 | 两性色午夜视频免费播放 | 久久亚洲国产成人精品性色 | 少妇的肉体aa片免费 | 久久久精品456亚洲影院 | 亚洲精品国产品国语在线观看 | 国产精品毛片一区二区 | 亚洲无人区一区二区三区 | 亚洲中文字幕无码中文字在线 | 午夜精品久久久久久久久 | 亚洲色在线无码国产精品不卡 | 少妇高潮喷潮久久久影院 | 夜夜影院未满十八勿进 | 久久视频在线观看精品 | 国产午夜无码视频在线观看 | 少妇厨房愉情理9仑片视频 | 亚洲精品国产a久久久久久 | 欧美丰满熟妇xxxx | 女人被男人爽到呻吟的视频 | 国产亚洲人成在线播放 | 久久zyz资源站无码中文动漫 | 精品一二三区久久aaa片 | 男女猛烈xx00免费视频试看 | 粉嫩少妇内射浓精videos | 日本肉体xxxx裸交 | 天堂久久天堂av色综合 | 亚洲春色在线视频 | 一个人看的视频www在线 | 无码国产乱人伦偷精品视频 | 国产精品-区区久久久狼 | 亚欧洲精品在线视频免费观看 | 国产精品第一区揄拍无码 | 国产色精品久久人妻 | 骚片av蜜桃精品一区 | 日本熟妇浓毛 | 日本熟妇大屁股人妻 | 三上悠亚人妻中文字幕在线 | 亚洲无人区一区二区三区 | 国内丰满熟女出轨videos | 无码成人精品区在线观看 | 性色欲情网站iwww九文堂 | 国产三级久久久精品麻豆三级 | 狠狠色噜噜狠狠狠7777奇米 | 夜夜夜高潮夜夜爽夜夜爰爰 | 亚洲自偷精品视频自拍 | 亚洲成色www久久网站 | 婷婷六月久久综合丁香 | av无码不卡在线观看免费 | 欧美精品一区二区精品久久 | 小sao货水好多真紧h无码视频 | 人人妻人人藻人人爽欧美一区 | 亚洲成a人片在线观看无码3d | 日本精品人妻无码77777 天堂一区人妻无码 | 久在线观看福利视频 | 国产97人人超碰caoprom | 亚洲色无码一区二区三区 | 精品国精品国产自在久国产87 | 亚洲精品久久久久久一区二区 | 人妻少妇精品无码专区二区 | 自拍偷自拍亚洲精品被多人伦好爽 | 亚洲日韩乱码中文无码蜜桃臀网站 | 成人女人看片免费视频放人 | 7777奇米四色成人眼影 | 熟女少妇在线视频播放 | 中文字幕+乱码+中文字幕一区 | 色偷偷人人澡人人爽人人模 | 中文字幕av无码一区二区三区电影 | 国产激情一区二区三区 | 曰本女人与公拘交酡免费视频 | 性色欲情网站iwww九文堂 | 丰满肥臀大屁股熟妇激情视频 | 少妇人妻大乳在线视频 | 国产成人综合美国十次 | 水蜜桃亚洲一二三四在线 | 亚洲の无码国产の无码步美 | 亚洲人成无码网www | 丰满人妻一区二区三区免费视频 | 国产精品香蕉在线观看 | 老太婆性杂交欧美肥老太 | 日韩精品a片一区二区三区妖精 | 奇米影视7777久久精品 | 真人与拘做受免费视频一 | 精品国产麻豆免费人成网站 | 乱人伦人妻中文字幕无码 | 国产麻豆精品一区二区三区v视界 | 精品欧洲av无码一区二区三区 | 亚洲国产欧美日韩精品一区二区三区 | 亚洲综合精品香蕉久久网 | 东北女人啪啪对白 | 久久国产36精品色熟妇 | 对白脏话肉麻粗话av | 亚洲中文字幕无码中字 | 男女作爱免费网站 | 少妇无码av无码专区在线观看 | 狠狠色噜噜狠狠狠狠7777米奇 | 欧美国产亚洲日韩在线二区 | 99精品无人区乱码1区2区3区 | 亚洲精品一区二区三区在线 | 99久久精品日本一区二区免费 | 日韩av无码一区二区三区不卡 | 国产无套内射久久久国产 | 狠狠躁日日躁夜夜躁2020 | 麻豆果冻传媒2021精品传媒一区下载 | 久久久精品国产sm最大网站 | 色老头在线一区二区三区 | а天堂中文在线官网 | 国产xxx69麻豆国语对白 | 亚洲精品午夜国产va久久成人 | 精品国产福利一区二区 | 国产亚洲欧美在线专区 | 人妻与老人中文字幕 | 国产精品亚洲lv粉色 | 少妇高潮喷潮久久久影院 | 给我免费的视频在线观看 | 日本www一道久久久免费榴莲 | 欧美变态另类xxxx | 4hu四虎永久在线观看 | 国产激情艳情在线看视频 | 精品久久久久久人妻无码中文字幕 | 久久久久免费看成人影片 | 欧美日韩综合一区二区三区 | 久久精品中文字幕一区 | 亚洲中文无码av永久不收费 | 欧美老人巨大xxxx做受 | 国产9 9在线 | 中文 | 老子影院午夜伦不卡 | 国产两女互慰高潮视频在线观看 | 狠狠综合久久久久综合网 | 国产精品人妻一区二区三区四 | 国产情侣作爱视频免费观看 | 国产av一区二区精品久久凹凸 | 午夜不卡av免费 一本久久a久久精品vr综合 | 丰满岳乱妇在线观看中字无码 | 东京热一精品无码av | 久久久久免费看成人影片 | 妺妺窝人体色www婷婷 | av无码不卡在线观看免费 | 中文字幕无码av波多野吉衣 | 少妇太爽了在线观看 | 在线成人www免费观看视频 | 强伦人妻一区二区三区视频18 | 国产精品久久精品三级 | 亚洲欧美色中文字幕在线 | 精品熟女少妇av免费观看 | 精品国偷自产在线 | 夜精品a片一区二区三区无码白浆 | 中文毛片无遮挡高清免费 | 久久综合九色综合欧美狠狠 | 国产精品毛多多水多 | 精品无码一区二区三区爱欲 | 特黄特色大片免费播放器图片 | 亚洲成a人片在线观看无码3d | 国语自产偷拍精品视频偷 | 午夜性刺激在线视频免费 | 天天躁夜夜躁狠狠是什么心态 | 亚洲熟妇色xxxxx欧美老妇 | 久久zyz资源站无码中文动漫 | 欧美日韩一区二区免费视频 | 国产精品对白交换视频 | 77777熟女视频在线观看 а天堂中文在线官网 | 亚洲无人区午夜福利码高清完整版 | 曰韩少妇内射免费播放 | 波多野结衣高清一区二区三区 | 无码精品国产va在线观看dvd | 欧美喷潮久久久xxxxx | 国产成人无码午夜视频在线观看 | 色五月五月丁香亚洲综合网 | 小鲜肉自慰网站xnxx | 少妇激情av一区二区 | 国产热a欧美热a在线视频 | 国产成人无码av在线影院 | 色综合久久中文娱乐网 | 亚洲伊人久久精品影院 | 高中生自慰www网站 | 久久国产自偷自偷免费一区调 | 久久99热只有频精品8 | 久久久国产精品无码免费专区 | 高潮喷水的毛片 | 久久五月精品中文字幕 | 精品熟女少妇av免费观看 | 国产精品沙发午睡系列 | 精品午夜福利在线观看 | 欧美激情一区二区三区成人 | 免费观看又污又黄的网站 | 精品人妻人人做人人爽 | 日韩精品无码免费一区二区三区 | 亚洲欧洲无卡二区视頻 | 日韩精品乱码av一区二区 | 撕开奶罩揉吮奶头视频 | 亚洲乱亚洲乱妇50p | 国产精品无码mv在线观看 | 97资源共享在线视频 | 精品人妻av区 | 无码帝国www无码专区色综合 | 亚洲 日韩 欧美 成人 在线观看 | 久久成人a毛片免费观看网站 | 亚洲色欲色欲天天天www | 亚洲男人av香蕉爽爽爽爽 | 精品人妻人人做人人爽夜夜爽 | 人妻aⅴ无码一区二区三区 | 亚洲国产精品无码久久久久高潮 | 少妇高潮喷潮久久久影院 | 好男人社区资源 | 国产精品国产自线拍免费软件 | 久久99精品久久久久久动态图 | 国产精品亚洲а∨无码播放麻豆 | 亚洲综合久久一区二区 | 无码人妻出轨黑人中文字幕 | 熟妇女人妻丰满少妇中文字幕 | 欧美日本免费一区二区三区 | 国产av剧情md精品麻豆 | 亚洲国产av美女网站 | 日本一卡二卡不卡视频查询 | 丁香花在线影院观看在线播放 | 日本护士xxxxhd少妇 | 特级做a爰片毛片免费69 | 99久久精品国产一区二区蜜芽 | 亚洲天堂2017无码 | 97se亚洲精品一区 | 国产猛烈高潮尖叫视频免费 | 国产成人无码专区 | 亚洲精品国偷拍自产在线麻豆 | 国产精品无码永久免费888 | 精品少妇爆乳无码av无码专区 | 精品一二三区久久aaa片 | 精品国精品国产自在久国产87 | 国产精品久久久午夜夜伦鲁鲁 | 丰腴饱满的极品熟妇 | 久久久久久久女国产乱让韩 | 精品人妻中文字幕有码在线 | 亚洲精品一区二区三区四区五区 | 一本大道久久东京热无码av | 丝袜美腿亚洲一区二区 | 亚洲精品一区二区三区四区五区 | 亚洲中文字幕无码中文字在线 | 噜噜噜亚洲色成人网站 | 东北女人啪啪对白 | 成人aaa片一区国产精品 | 男女性色大片免费网站 | 亚洲中文字幕无码一久久区 | 日本成熟视频免费视频 | 欧美老妇交乱视频在线观看 | 国产艳妇av在线观看果冻传媒 | 国产内射爽爽大片视频社区在线 | 国产午夜福利100集发布 | 国产精品对白交换视频 | 欧美 丝袜 自拍 制服 另类 | 久久久久久久久蜜桃 | 国产精品久久久久影院嫩草 | 精品久久久无码中文字幕 | 久久久久国色av免费观看性色 | 久久久久久a亚洲欧洲av冫 | 99久久久无码国产精品免费 | 亚洲精品国产第一综合99久久 | 永久免费观看美女裸体的网站 | 日韩精品无码一本二本三本色 | 国产乱人无码伦av在线a | 一本精品99久久精品77 | 国产另类ts人妖一区二区 | 大肉大捧一进一出视频出来呀 | 国产区女主播在线观看 | 中文字幕日产无线码一区 | 欧美人与禽zoz0性伦交 | 国模大胆一区二区三区 | 亚洲精品成a人在线观看 | 国产午夜视频在线观看 | 色婷婷香蕉在线一区二区 | 国产精品.xx视频.xxtv | 国产亚洲精品久久久久久 | 亚洲欧美精品aaaaaa片 | 日本熟妇浓毛 | 中文字幕乱码人妻二区三区 | 亚洲熟妇色xxxxx欧美老妇 | 亚洲国产精品一区二区美利坚 | 欧美怡红院免费全部视频 | 亚洲熟女一区二区三区 | 中文字幕人妻无码一夲道 | 性啪啪chinese东北女人 | 中文字幕无码免费久久99 | 亚洲高清偷拍一区二区三区 | 国产性生大片免费观看性 | 国产精品无码成人午夜电影 | 中国女人内谢69xxxxxa片 | 久久午夜无码鲁丝片秋霞 | 欧美xxxxx精品 | 国语精品一区二区三区 | 国产午夜精品一区二区三区嫩草 | 亚洲色在线无码国产精品不卡 | 波多野结衣一区二区三区av免费 | 永久免费观看美女裸体的网站 | 水蜜桃亚洲一二三四在线 | 国产成人无码a区在线观看视频app | 77777熟女视频在线观看 а天堂中文在线官网 | 九九综合va免费看 | 东京热无码av男人的天堂 | 精品无码一区二区三区的天堂 | 激情内射亚州一区二区三区爱妻 | 免费观看又污又黄的网站 | 亚洲爆乳无码专区 | 精品 日韩 国产 欧美 视频 | 精品少妇爆乳无码av无码专区 | 久久综合香蕉国产蜜臀av | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 国产精品沙发午睡系列 | 久久视频在线观看精品 | 黑人巨大精品欧美黑寡妇 | 精品偷自拍另类在线观看 | 亚洲精品久久久久久一区二区 | 欧美精品无码一区二区三区 | 亚洲国产精品久久久天堂 | 亚洲欧美日韩国产精品一区二区 | 亚洲a无码综合a国产av中文 | 亚洲小说图区综合在线 | 日本熟妇乱子伦xxxx | 国产麻豆精品精东影业av网站 | 51国偷自产一区二区三区 | 中国女人内谢69xxxxxa片 | 自拍偷自拍亚洲精品被多人伦好爽 | 精品国产一区二区三区av 性色 | 中文字幕久久久久人妻 | 人妻与老人中文字幕 | 久久99精品国产麻豆蜜芽 | 少妇高潮喷潮久久久影院 | 国产av剧情md精品麻豆 | 无码人妻精品一区二区三区不卡 | 国产性生交xxxxx无码 | 欧美老熟妇乱xxxxx | 在线成人www免费观看视频 | 内射欧美老妇wbb | 精品国偷自产在线 | 99久久精品日本一区二区免费 | 亚洲日韩乱码中文无码蜜桃臀网站 | 色综合久久久久综合一本到桃花网 | 欧洲vodafone精品性 | 国产精品对白交换视频 | 国产成人无码av片在线观看不卡 | 国产精品久久久久久亚洲影视内衣 | 欧美日韩亚洲国产精品 | 99久久人妻精品免费二区 | 蜜桃视频韩日免费播放 | 国色天香社区在线视频 | 久久99久久99精品中文字幕 | 欧美变态另类xxxx | 无遮挡国产高潮视频免费观看 | 无码吃奶揉捏奶头高潮视频 | 强辱丰满人妻hd中文字幕 | 成熟女人特级毛片www免费 | 东京一本一道一二三区 | 日日鲁鲁鲁夜夜爽爽狠狠 | 中文字幕 亚洲精品 第1页 | 2020久久香蕉国产线看观看 | 人妻与老人中文字幕 | 色婷婷久久一区二区三区麻豆 | 欧美丰满熟妇xxxx性ppx人交 | 一个人看的www免费视频在线观看 | 久久无码中文字幕免费影院蜜桃 | 97夜夜澡人人爽人人喊中国片 | 欧洲极品少妇 | 久久久久亚洲精品中文字幕 | 青青久在线视频免费观看 | 国产高潮视频在线观看 | 精品欧洲av无码一区二区三区 | 精品亚洲成av人在线观看 | 亚洲国产午夜精品理论片 | 久久精品国产99久久6动漫 | 欧美人与善在线com | 国产成人无码av片在线观看不卡 | 婷婷丁香五月天综合东京热 | 国产特级毛片aaaaaa高潮流水 | 九月婷婷人人澡人人添人人爽 | 日韩精品a片一区二区三区妖精 | 99视频精品全部免费免费观看 | 强辱丰满人妻hd中文字幕 | 亚洲成a人片在线观看无码3d | 丰满少妇熟乱xxxxx视频 | 亚洲性无码av中文字幕 | 中文字幕无线码免费人妻 | 欧美成人午夜精品久久久 | 成熟女人特级毛片www免费 | 亚洲人成网站色7799 | 日韩精品一区二区av在线 | 99久久久国产精品无码免费 | 欧美成人免费全部网站 | 国产亚洲精品久久久久久国模美 | 日本一本二本三区免费 | 无码国产乱人伦偷精品视频 | 粉嫩少妇内射浓精videos | 男人和女人高潮免费网站 | 在线a亚洲视频播放在线观看 | 伦伦影院午夜理论片 | 成人免费视频视频在线观看 免费 | 四虎国产精品一区二区 | 国产精品无码一区二区桃花视频 | 亚洲第一网站男人都懂 | 亚洲成a人片在线观看无码3d | 亚洲大尺度无码无码专区 | 欧美三级不卡在线观看 | 香蕉久久久久久av成人 | 无码国产色欲xxxxx视频 | 最新国产乱人伦偷精品免费网站 | 免费播放一区二区三区 | 又色又爽又黄的美女裸体网站 | 日韩少妇内射免费播放 | 中文亚洲成a人片在线观看 | 超碰97人人做人人爱少妇 | 国产精品国产自线拍免费软件 | 亚洲人交乣女bbw | 亚洲人交乣女bbw | 国产无遮挡吃胸膜奶免费看 | 无码av岛国片在线播放 | 亚洲国产精品一区二区第一页 | 亚洲日韩一区二区 | 国产精品对白交换视频 | 亚洲乱码中文字幕在线 | 欧美人妻一区二区三区 | 精品久久久无码中文字幕 | 久久亚洲日韩精品一区二区三区 | 欧美日韩亚洲国产精品 | 国产精品国产自线拍免费软件 | 亚洲色大成网站www | 少妇无码av无码专区在线观看 | 人人妻人人澡人人爽欧美精品 | 香蕉久久久久久av成人 | 日韩人妻无码中文字幕视频 | 无码精品人妻一区二区三区av | 亚洲一区二区三区含羞草 | 99视频精品全部免费免费观看 | 131美女爱做视频 | 亚洲人成网站在线播放942 | 初尝人妻少妇中文字幕 | 亚洲人成网站在线播放942 | 熟女俱乐部五十路六十路av | 国产一区二区三区日韩精品 | 天堂在线观看www | 国产在线无码精品电影网 | 日韩无套无码精品 | 东京热无码av男人的天堂 | 亚洲 a v无 码免 费 成 人 a v | 国产成人无码a区在线观看视频app | 国产两女互慰高潮视频在线观看 | 狠狠亚洲超碰狼人久久 | 亚洲色偷偷偷综合网 | 久久国产精品偷任你爽任你 | 成人无码影片精品久久久 | 给我免费的视频在线观看 | 人妻插b视频一区二区三区 | 日韩亚洲欧美中文高清在线 | 成年美女黄网站色大免费全看 | 亚洲男女内射在线播放 | 日本一区二区三区免费播放 | 无码人妻黑人中文字幕 | 青青草原综合久久大伊人精品 | 麻豆果冻传媒2021精品传媒一区下载 | 国产亚洲精品久久久久久久 | 婷婷综合久久中文字幕蜜桃三电影 | 美女张开腿让人桶 | 国产超碰人人爽人人做人人添 | 亚洲а∨天堂久久精品2021 | 亚洲乱码中文字幕在线 | 亚洲精品成a人在线观看 | 蜜桃臀无码内射一区二区三区 | 国产无遮挡吃胸膜奶免费看 | 免费无码午夜福利片69 | 人妻互换免费中文字幕 | 婷婷综合久久中文字幕蜜桃三电影 | 中文字幕亚洲情99在线 | 久久99热只有频精品8 | 午夜福利不卡在线视频 | 国产人成高清在线视频99最全资源 | 在线看片无码永久免费视频 | 精品一二三区久久aaa片 | 黑人巨大精品欧美黑寡妇 | 久久久久免费看成人影片 | 精品欧美一区二区三区久久久 | 亚洲成a人片在线观看日本 | 亚洲色成人中文字幕网站 | 中文字幕久久久久人妻 | 十八禁视频网站在线观看 | 日日摸夜夜摸狠狠摸婷婷 | 2020久久超碰国产精品最新 | 天海翼激烈高潮到腰振不止 | 国内揄拍国内精品少妇国语 | 无码人妻丰满熟妇区毛片18 | 荫蒂被男人添的好舒服爽免费视频 | 牲欲强的熟妇农村老妇女视频 | 亚洲精品成人av在线 | 一二三四在线观看免费视频 | 久久久久成人精品免费播放动漫 | 国产精品无码一区二区三区不卡 | 亚洲 日韩 欧美 成人 在线观看 | 精品成在人线av无码免费看 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 日日噜噜噜噜夜夜爽亚洲精品 | 国产 浪潮av性色四虎 | 人人爽人人爽人人片av亚洲 | 成人精品天堂一区二区三区 | 狂野欧美性猛xxxx乱大交 | 亚洲男人av香蕉爽爽爽爽 | 97精品人妻一区二区三区香蕉 | 欧美三级a做爰在线观看 | 东京一本一道一二三区 | 欧美freesex黑人又粗又大 | 欧美大屁股xxxxhd黑色 | 丰满少妇人妻久久久久久 | 国产精品a成v人在线播放 | 国产激情精品一区二区三区 | 狠狠色噜噜狠狠狠狠7777米奇 | 天堂久久天堂av色综合 | 性欧美牲交在线视频 | 成熟女人特级毛片www免费 | 久久成人a毛片免费观看网站 | 国产特级毛片aaaaaa高潮流水 | 婷婷五月综合激情中文字幕 | 在线a亚洲视频播放在线观看 | 国产高清不卡无码视频 | 久9re热视频这里只有精品 | 国产亚洲精品久久久久久久久动漫 | 精品一区二区不卡无码av | 国产成人人人97超碰超爽8 | 成人女人看片免费视频放人 | 精品夜夜澡人妻无码av蜜桃 | 国产内射爽爽大片视频社区在线 | 蜜桃视频插满18在线观看 | 青草视频在线播放 | 波多野结衣av在线观看 | 少妇一晚三次一区二区三区 | 亚洲色欲色欲天天天www | 性开放的女人aaa片 | 亚洲人成网站在线播放942 | 久久99久久99精品中文字幕 | 无码午夜成人1000部免费视频 | 无码毛片视频一区二区本码 | 人人爽人人澡人人人妻 | 一本久久伊人热热精品中文字幕 | 精品人人妻人人澡人人爽人人 | 久激情内射婷内射蜜桃人妖 | 中文字幕无码av激情不卡 | 日产精品高潮呻吟av久久 | 狠狠色噜噜狠狠狠狠7777米奇 | 少妇愉情理伦片bd | 国产黄在线观看免费观看不卡 | 色综合久久88色综合天天 | 国产69精品久久久久app下载 | 日本高清一区免费中文视频 | 97久久超碰中文字幕 | 国产高清不卡无码视频 | 2020久久香蕉国产线看观看 | 精品少妇爆乳无码av无码专区 | 性色欲网站人妻丰满中文久久不卡 | 国产精品国产三级国产专播 | 婷婷综合久久中文字幕蜜桃三电影 | 精品国偷自产在线 | 亚洲熟妇自偷自拍另类 | 老子影院午夜精品无码 | 亚洲欧美日韩成人高清在线一区 | 久久午夜无码鲁丝片午夜精品 | 蜜臀av无码人妻精品 | 国语自产偷拍精品视频偷 | 成 人 网 站国产免费观看 | 亚洲日韩一区二区三区 | 午夜福利试看120秒体验区 | 人妻插b视频一区二区三区 | 色综合久久网 | 亚洲娇小与黑人巨大交 | 国产疯狂伦交大片 | av无码不卡在线观看免费 | 国产乡下妇女做爰 | 亚洲成在人网站无码天堂 | 又大又紧又粉嫩18p少妇 | 亚洲精品一区二区三区在线观看 | 久久久久人妻一区精品色欧美 | 国精品人妻无码一区二区三区蜜柚 | 狠狠cao日日穞夜夜穞av | 日本精品人妻无码77777 天堂一区人妻无码 | 午夜精品久久久久久久 | 红桃av一区二区三区在线无码av | 国产亲子乱弄免费视频 | 亚洲小说图区综合在线 | 久久精品女人的天堂av | 真人与拘做受免费视频一 | √天堂资源地址中文在线 | 中文字幕无线码 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 国产精品久久久久9999小说 | 无遮无挡爽爽免费视频 | 特黄特色大片免费播放器图片 | 国产成人无码av一区二区 | 无套内谢老熟女 | 国产亚洲精品久久久久久久 | 精品国产一区二区三区av 性色 | 1000部夫妻午夜免费 | 国产av无码专区亚洲a∨毛片 | 国产内射爽爽大片视频社区在线 | 沈阳熟女露脸对白视频 | 99在线 | 亚洲 | 国产一区二区三区四区五区加勒比 | 亚洲国产欧美日韩精品一区二区三区 | 色情久久久av熟女人妻网站 | 国产av一区二区精品久久凹凸 | 男女作爱免费网站 | 午夜福利一区二区三区在线观看 | 爽爽影院免费观看 | 亚洲人成影院在线观看 | 丰满岳乱妇在线观看中字无码 | 永久免费精品精品永久-夜色 | 性欧美牲交xxxxx视频 | 亚洲一区二区三区四区 | 狠狠色欧美亚洲狠狠色www | 老子影院午夜伦不卡 | 天天躁日日躁狠狠躁免费麻豆 | 国产成人精品视频ⅴa片软件竹菊 | 国产成人综合在线女婷五月99播放 | 中文字幕无码av激情不卡 | 狠狠色丁香久久婷婷综合五月 | 久久精品国产一区二区三区 | 成 人影片 免费观看 | 中文字幕无码av波多野吉衣 | 亚洲日本va午夜在线电影 | 性做久久久久久久久 | 免费国产成人高清在线观看网站 | 亚洲 高清 成人 动漫 | 成人免费无码大片a毛片 | 成人精品视频一区二区 | 国产无av码在线观看 | 熟妇人妻激情偷爽文 | 日韩av激情在线观看 | 高潮喷水的毛片 | 国产精品怡红院永久免费 | 国产97在线 | 亚洲 | 亚洲精品综合五月久久小说 | 色婷婷久久一区二区三区麻豆 | 国产精品久久久久影院嫩草 | 在线精品国产一区二区三区 | 无码国内精品人妻少妇 | 亚洲自偷自拍另类第1页 | 蜜臀av在线播放 久久综合激激的五月天 | 亚洲日韩av一区二区三区中文 | 麻豆国产丝袜白领秘书在线观看 | √天堂中文官网8在线 | 精品亚洲成av人在线观看 | 激情国产av做激情国产爱 | 噜噜噜亚洲色成人网站 | 日韩人妻无码一区二区三区久久99 | 青草青草久热国产精品 | 国产午夜无码视频在线观看 | 日日天日日夜日日摸 | 国产精品第一国产精品 | 在线 国产 欧美 亚洲 天堂 | 天天躁日日躁狠狠躁免费麻豆 | 欧美人与善在线com | 天堂一区人妻无码 | 久久精品中文字幕一区 | 亚欧洲精品在线视频免费观看 | 中文无码成人免费视频在线观看 | 精品欧美一区二区三区久久久 | 国产高清av在线播放 | 强开小婷嫩苞又嫩又紧视频 | 中文字幕 人妻熟女 | 日日橹狠狠爱欧美视频 | 久久综合狠狠综合久久综合88 | 成人一在线视频日韩国产 | 2020最新国产自产精品 | 国产成人综合在线女婷五月99播放 | 中文字幕乱码中文乱码51精品 | 一本精品99久久精品77 | 国精产品一品二品国精品69xx | 丰满少妇人妻久久久久久 | 人妻少妇精品久久 | 丰满妇女强制高潮18xxxx | 亚洲熟女一区二区三区 | 久久www免费人成人片 | 色一情一乱一伦 | 国产精品久久久av久久久 | 日本免费一区二区三区最新 | 国产色精品久久人妻 | 高潮喷水的毛片 | 国産精品久久久久久久 | 成人无码精品1区2区3区免费看 | 麻豆md0077饥渴少妇 | 乱人伦人妻中文字幕无码久久网 | 国产一区二区三区影院 | 超碰97人人做人人爱少妇 | 欧美日韩精品 | 亚洲国产精品无码久久久久高潮 | 久久天天躁狠狠躁夜夜免费观看 | 亚洲 a v无 码免 费 成 人 a v | 亚洲自偷精品视频自拍 | 亚洲成av人在线观看网址 | 中文字幕人妻无码一夲道 | 亚洲成色在线综合网站 | 熟女少妇在线视频播放 | 清纯唯美经典一区二区 | 午夜精品久久久内射近拍高清 | 大乳丰满人妻中文字幕日本 | 久久国产精品偷任你爽任你 | 最新国产麻豆aⅴ精品无码 | 青青久在线视频免费观看 | 婷婷五月综合缴情在线视频 | 国产午夜手机精彩视频 | 国产熟妇高潮叫床视频播放 | 香港三级日本三级妇三级 | 国产精品无码一区二区桃花视频 | 久久久成人毛片无码 | 国产午夜无码精品免费看 | 欧美老妇交乱视频在线观看 | 亚洲无人区午夜福利码高清完整版 | 国产尤物精品视频 | 成人综合网亚洲伊人 | 欧美怡红院免费全部视频 | 亚洲无人区午夜福利码高清完整版 | 亚洲精品成a人在线观看 | 国产69精品久久久久app下载 | 任你躁国产自任一区二区三区 | 欧美zoozzooz性欧美 | 久久精品中文字幕一区 | 最近中文2019字幕第二页 | 巨爆乳无码视频在线观看 | 国产做国产爱免费视频 | 又大又硬又爽免费视频 | 国产精品久久久久7777 | 日韩无码专区 | 国产精品沙发午睡系列 | 国产精品久久久 | 中文字幕日产无线码一区 | √天堂资源地址中文在线 | 久久久久久久女国产乱让韩 | 久久久中文字幕日本无吗 | 国产色xx群视频射精 | 女人被男人躁得好爽免费视频 | 精品日本一区二区三区在线观看 | 亚洲国产成人av在线观看 | 在线欧美精品一区二区三区 | 亚洲日韩精品欧美一区二区 | 搡女人真爽免费视频大全 | 国产99久久精品一区二区 | 熟妇人妻激情偷爽文 | 久久综合九色综合欧美狠狠 | 亚洲精品国产精品乱码不卡 | 成熟妇人a片免费看网站 | a在线亚洲男人的天堂 | 精品国产麻豆免费人成网站 | 精品一区二区三区无码免费视频 | 欧美成人免费全部网站 | 国产亚洲精品久久久闺蜜 | 国产成人精品久久亚洲高清不卡 | 中文字幕色婷婷在线视频 | 日本丰满熟妇videos | 亚洲第一网站男人都懂 | 日日碰狠狠丁香久燥 | 国产精品毛片一区二区 | 国产色视频一区二区三区 | 高清国产亚洲精品自在久久 | 撕开奶罩揉吮奶头视频 | 国产sm调教视频在线观看 | 无码国产乱人伦偷精品视频 | 乱码午夜-极国产极内射 | √天堂资源地址中文在线 | 小泽玛莉亚一区二区视频在线 | 久久国内精品自在自线 | 欧美大屁股xxxxhd黑色 | 日韩精品久久久肉伦网站 | 麻豆精产国品 | 色婷婷av一区二区三区之红樱桃 | 理论片87福利理论电影 | 亚洲无人区午夜福利码高清完整版 | 无码国产色欲xxxxx视频 | 婷婷五月综合缴情在线视频 | 亚洲s码欧洲m码国产av | 任你躁国产自任一区二区三区 | 国产在线无码精品电影网 | 国产精品久久久久久无码 | 2020久久超碰国产精品最新 | 性欧美熟妇videofreesex | 波多野结衣av在线观看 | 又粗又大又硬毛片免费看 | 内射巨臀欧美在线视频 | 中文毛片无遮挡高清免费 | 精品午夜福利在线观看 | 国产亚洲日韩欧美另类第八页 | 亚洲人亚洲人成电影网站色 | 俺去俺来也www色官网 | 久久久精品人妻久久影视 | 九九热爱视频精品 | 久久精品国产日本波多野结衣 | 狂野欧美激情性xxxx | 欧美精品无码一区二区三区 | 一本加勒比波多野结衣 | 国产肉丝袜在线观看 | 又大又黄又粗又爽的免费视频 | 99久久精品日本一区二区免费 | 奇米影视888欧美在线观看 | 国产激情无码一区二区 | 女人和拘做爰正片视频 | 少妇被黑人到高潮喷出白浆 | 色综合久久网 | 亚洲国产欧美国产综合一区 | 欧美日韩色另类综合 | 精品国产av色一区二区深夜久久 | 国产人妻精品一区二区三区不卡 | 人人澡人摸人人添 | www一区二区www免费 | 性欧美videos高清精品 | 久精品国产欧美亚洲色aⅴ大片 | 国产av剧情md精品麻豆 | 亚洲精品综合五月久久小说 | 粉嫩少妇内射浓精videos | 成人无码视频免费播放 | 麻豆精产国品 | 亚洲色www成人永久网址 | 最新国产乱人伦偷精品免费网站 | 97色伦图片97综合影院 | 久久综合久久自在自线精品自 | 亚洲国产欧美日韩精品一区二区三区 | 夜夜躁日日躁狠狠久久av | 乱码av麻豆丝袜熟女系列 | 欧洲精品码一区二区三区免费看 | 全球成人中文在线 | 国产绳艺sm调教室论坛 | 国产亚洲欧美日韩亚洲中文色 | 国产激情一区二区三区 | 欧美色就是色 | 亚洲日韩中文字幕在线播放 | 爱做久久久久久 | www成人国产高清内射 | 国产福利视频一区二区 | 18禁止看的免费污网站 | 国产sm调教视频在线观看 | 动漫av网站免费观看 | 久久综合九色综合欧美狠狠 | 无码人妻少妇伦在线电影 | 国内精品九九久久久精品 | 久激情内射婷内射蜜桃人妖 | 亚洲最大成人网站 | 成人片黄网站色大片免费观看 | 免费乱码人妻系列无码专区 | 小泽玛莉亚一区二区视频在线 | 久久99精品久久久久久动态图 | 日欧一片内射va在线影院 | 日本免费一区二区三区最新 | 亚洲熟妇自偷自拍另类 | 俺去俺来也在线www色官网 | 人人妻人人藻人人爽欧美一区 | 一本色道久久综合狠狠躁 | 色综合久久久久综合一本到桃花网 | 九九久久精品国产免费看小说 | 天堂а√在线地址中文在线 | 无码国产乱人伦偷精品视频 | 色婷婷综合中文久久一本 | 日日天干夜夜狠狠爱 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 亚洲中文字幕av在天堂 | 少女韩国电视剧在线观看完整 | 人妻少妇被猛烈进入中文字幕 | 正在播放老肥熟妇露脸 | 亚洲欧美综合区丁香五月小说 | 51国偷自产一区二区三区 | 亚洲成a人片在线观看无码3d | 伊人色综合久久天天小片 | 国精产品一品二品国精品69xx | av香港经典三级级 在线 | 亚洲а∨天堂久久精品2021 | 国产av一区二区精品久久凹凸 | 婷婷综合久久中文字幕蜜桃三电影 | 一区二区三区高清视频一 | 亚洲精品一区二区三区大桥未久 | 久久亚洲精品成人无码 | 自拍偷自拍亚洲精品10p | 无码av最新清无码专区吞精 | 欧美 丝袜 自拍 制服 另类 | 2020久久香蕉国产线看观看 | 日韩亚洲欧美中文高清在线 | 欧美老妇交乱视频在线观看 | av无码电影一区二区三区 | 无码国产激情在线观看 | 亚洲色欲久久久综合网东京热 | 国产精品无码一区二区桃花视频 | 久久精品国产一区二区三区肥胖 | 蜜桃无码一区二区三区 | 国产精品对白交换视频 | 精品厕所偷拍各类美女tp嘘嘘 | 亚洲精品国偷拍自产在线观看蜜桃 | 300部国产真实乱 | 国产成人精品久久亚洲高清不卡 | 捆绑白丝粉色jk震动捧喷白浆 | 亚洲区欧美区综合区自拍区 | 国产福利视频一区二区 | 亚洲码国产精品高潮在线 | 久久精品国产99久久6动漫 | 狠狠躁日日躁夜夜躁2020 | 精品人妻人人做人人爽 | 日本护士毛茸茸高潮 | 国产av无码专区亚洲awww | 荫蒂被男人添的好舒服爽免费视频 | 亚洲伊人久久精品影院 | 欧美老妇与禽交 | 亚洲成在人网站无码天堂 | 国产人妖乱国产精品人妖 | 亚洲精品国偷拍自产在线麻豆 | 人人澡人人透人人爽 | 波多野结衣高清一区二区三区 | 欧美freesex黑人又粗又大 | 丝袜美腿亚洲一区二区 | 精品夜夜澡人妻无码av蜜桃 | 午夜精品一区二区三区的区别 | 免费无码午夜福利片69 | 色五月丁香五月综合五月 | 狂野欧美激情性xxxx | 999久久久国产精品消防器材 | 一本大道伊人av久久综合 | 亚洲国产成人a精品不卡在线 | 国产做国产爱免费视频 | 亚洲一区二区三区国产精华液 | 亚洲精品美女久久久久久久 | 免费无码的av片在线观看 | 亚洲国产成人a精品不卡在线 | 无码国模国产在线观看 | 女人被男人躁得好爽免费视频 | 国产精品亚洲综合色区韩国 | 中国女人内谢69xxxx | 无套内射视频囯产 | 国产亚洲精品久久久久久 | 欧美人与禽zoz0性伦交 | 国产色精品久久人妻 | 亚洲第一无码av无码专区 | 日本高清一区免费中文视频 | 亚洲欧美精品伊人久久 | 国产特级毛片aaaaaaa高清 | 野狼第一精品社区 | 国精产品一区二区三区 | 暴力强奷在线播放无码 | 成 人影片 免费观看 | 玩弄少妇高潮ⅹxxxyw | 人妻无码αv中文字幕久久琪琪布 | 国产精品二区一区二区aⅴ污介绍 | www国产精品内射老师 | 免费网站看v片在线18禁无码 | 夜夜影院未满十八勿进 | 免费观看黄网站 | 国产激情精品一区二区三区 | 亚洲日韩一区二区三区 | 久久亚洲国产成人精品性色 | 麻豆国产人妻欲求不满谁演的 | 小sao货水好多真紧h无码视频 | 久久精品丝袜高跟鞋 | 99久久婷婷国产综合精品青草免费 | 日韩精品无码一本二本三本色 | 亚洲精品久久久久久久久久久 | 亚洲va中文字幕无码久久不卡 | 久久精品成人欧美大片 | 久久精品人妻少妇一区二区三区 | 午夜性刺激在线视频免费 | www一区二区www免费 | 少妇高潮喷潮久久久影院 | 精品水蜜桃久久久久久久 | 日本熟妇大屁股人妻 | 久久人人爽人人爽人人片ⅴ | 日韩av无码一区二区三区不卡 | 精品乱码久久久久久久 | 精品国产一区二区三区四区 | 久久这里只有精品视频9 | 色诱久久久久综合网ywww | 99久久精品日本一区二区免费 | 呦交小u女精品视频 | 无码乱肉视频免费大全合集 | 亚洲成a人片在线观看无码3d | 国内揄拍国内精品少妇国语 | 免费国产成人高清在线观看网站 | 久久久久亚洲精品中文字幕 | 国产精品视频免费播放 | 天堂无码人妻精品一区二区三区 | 久久精品中文字幕一区 | 玩弄少妇高潮ⅹxxxyw | 国产成人无码午夜视频在线观看 | 亚洲午夜无码久久 | 丰满少妇弄高潮了www | 国产精品久久久久久久9999 | 欧美日本免费一区二区三区 | 夫妻免费无码v看片 | 久久97精品久久久久久久不卡 | 国产成人av免费观看 | 国产一区二区三区日韩精品 | 无码免费一区二区三区 | 国产av剧情md精品麻豆 | 性欧美牲交xxxxx视频 | 97久久国产亚洲精品超碰热 | 无码一区二区三区在线 | 日欧一片内射va在线影院 | 无码人妻黑人中文字幕 | 国产精品高潮呻吟av久久4虎 | 99国产精品白浆在线观看免费 | 国产97人人超碰caoprom | 亚洲va中文字幕无码久久不卡 | 特黄特色大片免费播放器图片 | 欧美自拍另类欧美综合图片区 | 无人区乱码一区二区三区 | 人人爽人人澡人人高潮 | 欧美日韩人成综合在线播放 | 国产偷自视频区视频 | 日韩视频 中文字幕 视频一区 | 国产精品嫩草久久久久 | 亚洲精品一区国产 | 成年美女黄网站色大免费视频 | 欧美xxxxx精品 | 性生交片免费无码看人 | 国产精品鲁鲁鲁 | 欧美激情内射喷水高潮 | 在线精品国产一区二区三区 | 国产99久久精品一区二区 | 300部国产真实乱 | 俄罗斯老熟妇色xxxx | 久久精品女人天堂av免费观看 | 四虎影视成人永久免费观看视频 | 久久99热只有频精品8 | 性做久久久久久久免费看 | 美女毛片一区二区三区四区 | 澳门永久av免费网站 | 欧美肥老太牲交大战 | 宝宝好涨水快流出来免费视频 | 大地资源网第二页免费观看 | 在线 国产 欧美 亚洲 天堂 | 精品人妻人人做人人爽 | 国产成人无码专区 | 欧洲熟妇色 欧美 | 18禁止看的免费污网站 | 最近中文2019字幕第二页 | 国产av一区二区精品久久凹凸 | 在线欧美精品一区二区三区 | 狠狠cao日日穞夜夜穞av | 中文字幕久久久久人妻 | 日日噜噜噜噜夜夜爽亚洲精品 | 荫蒂被男人添的好舒服爽免费视频 | 97无码免费人妻超级碰碰夜夜 | 国产精品久久久久无码av色戒 | 欧美老妇与禽交 | 在线观看免费人成视频 | 免费男性肉肉影院 | 国产热a欧美热a在线视频 | 7777奇米四色成人眼影 | 亚洲成av人综合在线观看 | 亚洲精品久久久久中文第一幕 | 亚洲区欧美区综合区自拍区 | 精品国产精品久久一区免费式 | 亚洲中文无码av永久不收费 | 国产色xx群视频射精 | 国产激情无码一区二区 | 又色又爽又黄的美女裸体网站 | 久久综合激激的五月天 | 亚洲精品国偷拍自产在线观看蜜桃 | 久青草影院在线观看国产 | 青草视频在线播放 | 免费观看黄网站 | 国产女主播喷水视频在线观看 | 少妇无码一区二区二三区 | 亚洲色欲久久久综合网东京热 | 日日噜噜噜噜夜夜爽亚洲精品 | 波多野结衣高清一区二区三区 | 国产精品久久久久9999小说 | 精品无人国产偷自产在线 | 精品久久久久久人妻无码中文字幕 | 国产疯狂伦交大片 | 国产午夜无码视频在线观看 | 在线а√天堂中文官网 | 亚洲成a人片在线观看日本 | 我要看www免费看插插视频 | 久久久久亚洲精品男人的天堂 | 中文精品久久久久人妻不卡 | 国产精品无码一区二区三区不卡 | 欧美国产日产一区二区 | 精品偷拍一区二区三区在线看 | 图片区 小说区 区 亚洲五月 | 日韩人妻系列无码专区 | 最新版天堂资源中文官网 | 久久精品国产99久久6动漫 | 精品少妇爆乳无码av无码专区 | 亚洲国产精品美女久久久久 | 久久99精品国产麻豆蜜芽 | 成熟女人特级毛片www免费 | 国产一区二区三区精品视频 | 高清无码午夜福利视频 | v一区无码内射国产 | 一本精品99久久精品77 | 性啪啪chinese东北女人 | 夜夜高潮次次欢爽av女 | 蜜桃无码一区二区三区 | 欧美 丝袜 自拍 制服 另类 | 国产小呦泬泬99精品 | 亚洲中文字幕无码中字 | 激情内射日本一区二区三区 | 精品夜夜澡人妻无码av蜜桃 | 亚洲国产欧美在线成人 | 国产人妻人伦精品1国产丝袜 | 伊人久久大香线蕉亚洲 | 亚洲自偷自偷在线制服 | 欧洲精品码一区二区三区免费看 | 高清无码午夜福利视频 | 国模大胆一区二区三区 | 亚洲综合无码久久精品综合 | 99精品国产综合久久久久五月天 | 国产精品18久久久久久麻辣 | 午夜精品一区二区三区在线观看 | 蜜臀av无码人妻精品 | 中文字幕色婷婷在线视频 | 亚洲啪av永久无码精品放毛片 | 日韩欧美成人免费观看 | 在线а√天堂中文官网 | 欧美熟妇另类久久久久久不卡 | 国产综合在线观看 | 波多野结衣一区二区三区av免费 | 国产精品无码mv在线观看 | 国产人妻精品一区二区三区不卡 | 草草网站影院白丝内射 | 精品熟女少妇av免费观看 | 性生交大片免费看l | 亚洲色偷偷偷综合网 | 亚洲综合无码久久精品综合 | 亚洲综合久久一区二区 | 亚洲va中文字幕无码久久不卡 | 日韩 欧美 动漫 国产 制服 | 永久黄网站色视频免费直播 | 青青青手机频在线观看 | 久久精品国产日本波多野结衣 | 国产亲子乱弄免费视频 | 国产午夜亚洲精品不卡下载 | 国产在线精品一区二区三区直播 | 丰满岳乱妇在线观看中字无码 | 水蜜桃亚洲一二三四在线 | 日韩人妻少妇一区二区三区 | 国产精品高潮呻吟av久久 | 日日夜夜撸啊撸 | 日韩人妻系列无码专区 | 国产精品无码久久av | 久久99精品国产麻豆蜜芽 | 少妇高潮一区二区三区99 | av在线亚洲欧洲日产一区二区 | 日韩成人一区二区三区在线观看 | 丰满少妇高潮惨叫视频 | 人人妻人人澡人人爽欧美一区 | 99久久人妻精品免费二区 | 日本丰满护士爆乳xxxx | 亚洲 欧美 激情 小说 另类 | 欧美日韩综合一区二区三区 | 大地资源中文第3页 | 成人无码视频免费播放 | 人妻aⅴ无码一区二区三区 | 波多野结衣高清一区二区三区 | 国产午夜亚洲精品不卡下载 | 亚洲色欲久久久综合网东京热 | 99久久久无码国产aaa精品 | 亚洲а∨天堂久久精品2021 | 久久国产精品_国产精品 | 亚洲国精产品一二二线 | 国产午夜无码视频在线观看 | 久久精品中文闷骚内射 | 又大又硬又黄的免费视频 | 在线精品国产一区二区三区 | 精品夜夜澡人妻无码av蜜桃 | 无码福利日韩神码福利片 | 国产精品国产自线拍免费软件 | 无码人妻黑人中文字幕 | 蜜桃av抽搐高潮一区二区 | 双乳奶水饱满少妇呻吟 | 毛片内射-百度 | 亚洲欧洲中文日韩av乱码 | 国产精品鲁鲁鲁 | 人人妻人人澡人人爽欧美精品 | 亚洲熟妇色xxxxx欧美老妇y | 麻豆果冻传媒2021精品传媒一区下载 | 熟妇激情内射com | 久久久久亚洲精品中文字幕 | 国产69精品久久久久app下载 | 国产精品久久久久久久9999 | 久久久久成人片免费观看蜜芽 | 免费人成网站视频在线观看 | 性色av无码免费一区二区三区 | 久久精品丝袜高跟鞋 | 国产欧美精品一区二区三区 | 国产精品亚洲五月天高清 | 2019午夜福利不卡片在线 | 国产午夜无码精品免费看 | 99久久99久久免费精品蜜桃 | 伊人色综合久久天天小片 | 2019nv天堂香蕉在线观看 | 久久97精品久久久久久久不卡 | 亚洲精品国产a久久久久久 | 亚洲色在线无码国产精品不卡 | 黑人粗大猛烈进出高潮视频 | 国产亲子乱弄免费视频 | 清纯唯美经典一区二区 | 久久99热只有频精品8 | 日本精品少妇一区二区三区 | 亚洲国产日韩a在线播放 | 成人欧美一区二区三区黑人 | 又粗又大又硬毛片免费看 | 99久久精品国产一区二区蜜芽 | 亚洲一区二区三区国产精华液 | 日日鲁鲁鲁夜夜爽爽狠狠 | 久久亚洲精品中文字幕无男同 | 狂野欧美激情性xxxx | 国产精品久久久久久亚洲毛片 | 又粗又大又硬又长又爽 | 精品国产精品久久一区免费式 | 性生交大片免费看女人按摩摩 | 国产精品毛多多水多 | 免费观看激色视频网站 | 少妇人妻av毛片在线看 | 撕开奶罩揉吮奶头视频 | 国产美女极度色诱视频www | 欧美肥老太牲交大战 | 女人被男人爽到呻吟的视频 | 亚洲啪av永久无码精品放毛片 | 精品人人妻人人澡人人爽人人 | 国产精品久久国产三级国 | 国产精品亚洲一区二区三区喷水 | 黑人大群体交免费视频 | 久久久久亚洲精品男人的天堂 | 中文字幕人妻无码一夲道 | 亚洲综合在线一区二区三区 | 久久精品国产日本波多野结衣 | 人妻少妇精品视频专区 | 沈阳熟女露脸对白视频 | 99久久99久久免费精品蜜桃 | 日日麻批免费40分钟无码 | 国产熟女一区二区三区四区五区 | 97精品人妻一区二区三区香蕉 | 亚洲国产精华液网站w | 无码国内精品人妻少妇 | 亚洲精品国偷拍自产在线麻豆 | 综合网日日天干夜夜久久 | 成人免费视频在线观看 | 国产又爽又猛又粗的视频a片 | 久久精品国产亚洲精品 | 国产超级va在线观看视频 | 国产疯狂伦交大片 | 国产精品久久久久久亚洲影视内衣 | 国产精品高潮呻吟av久久4虎 | 99视频精品全部免费免费观看 | 日日摸日日碰夜夜爽av | 国产成人无码a区在线观看视频app | 在线播放亚洲第一字幕 | 国内精品人妻无码久久久影院 | 成在人线av无码免观看麻豆 | 国产成人综合在线女婷五月99播放 | 国产av无码专区亚洲a∨毛片 | 国产成人无码午夜视频在线观看 | 一区二区三区乱码在线 | 欧洲 | 成人无码精品1区2区3区免费看 | 成熟人妻av无码专区 | 人人妻人人澡人人爽欧美一区九九 | 人人澡人人透人人爽 | 成人亚洲精品久久久久 | 免费无码一区二区三区蜜桃大 | 国产亚洲精品久久久久久国模美 | 男女爱爱好爽视频免费看 | 亚洲精品国产品国语在线观看 | 成人免费无码大片a毛片 | 久久综合给久久狠狠97色 | 久久久久国色av免费观看性色 | 欧美熟妇另类久久久久久多毛 | 亚洲一区av无码专区在线观看 | 在线а√天堂中文官网 | 国产两女互慰高潮视频在线观看 | 国产人成高清在线视频99最全资源 | 乌克兰少妇xxxx做受 | 亚洲国产精品一区二区第一页 | 中文字幕 亚洲精品 第1页 | 在线观看免费人成视频 | 久久99精品久久久久久动态图 | 精品乱子伦一区二区三区 | 131美女爱做视频 | 亚洲精品一区二区三区四区五区 | 成人精品天堂一区二区三区 | 荫蒂被男人添的好舒服爽免费视频 | 永久黄网站色视频免费直播 | 又湿又紧又大又爽a视频国产 | 精品久久久无码人妻字幂 | av无码不卡在线观看免费 | 国产香蕉尹人视频在线 | 午夜丰满少妇性开放视频 | 久久精品国产日本波多野结衣 | 日韩少妇白浆无码系列 | 美女毛片一区二区三区四区 | 人妻少妇精品无码专区动漫 | 麻豆av传媒蜜桃天美传媒 | 亚洲色偷偷男人的天堂 | 亚洲国产欧美在线成人 | 国产精品18久久久久久麻辣 | 国产熟妇高潮叫床视频播放 | 久久99精品久久久久久动态图 | 欧美日韩久久久精品a片 | 野狼第一精品社区 | 国产午夜福利亚洲第一 | 大地资源中文第3页 | 久久国产精品二国产精品 | 久久亚洲中文字幕精品一区 | 午夜福利一区二区三区在线观看 | 亚洲精品成人av在线 | 成人无码视频免费播放 | 狠狠色色综合网站 | 日本大香伊一区二区三区 | a国产一区二区免费入口 | 亚洲精品一区二区三区在线观看 | 狠狠色噜噜狠狠狠7777奇米 | 国产成人无码区免费内射一片色欲 | 国内精品人妻无码久久久影院蜜桃 | 性欧美疯狂xxxxbbbb | 国产免费无码一区二区视频 | 国产亚洲精品精品国产亚洲综合 | 一个人免费观看的www视频 | 狠狠cao日日穞夜夜穞av | 少妇厨房愉情理9仑片视频 | 久久99精品久久久久久动态图 | 帮老师解开蕾丝奶罩吸乳网站 | 国产黄在线观看免费观看不卡 | 97se亚洲精品一区 | 亚洲精品午夜国产va久久成人 | 无码人妻丰满熟妇区五十路百度 | 久久精品丝袜高跟鞋 | 国产精品久久久午夜夜伦鲁鲁 | 人妻与老人中文字幕 | 欧美亚洲日韩国产人成在线播放 | 乌克兰少妇性做爰 | 精品夜夜澡人妻无码av蜜桃 | 狠狠色欧美亚洲狠狠色www | 丰满妇女强制高潮18xxxx | 荫蒂添的好舒服视频囗交 | 99riav国产精品视频 | 成人性做爰aaa片免费看不忠 | 国产极品美女高潮无套在线观看 | av在线亚洲欧洲日产一区二区 | 国产特级毛片aaaaaaa高清 | 中文字幕无码视频专区 | 国产亚洲精品精品国产亚洲综合 | 55夜色66夜色国产精品视频 | 日韩成人一区二区三区在线观看 | 亚洲精品鲁一鲁一区二区三区 | 亚洲熟熟妇xxxx | 国产日产欧产精品精品app | 午夜熟女插插xx免费视频 | 精品国产一区av天美传媒 | 精品国产一区二区三区四区在线看 | 婷婷丁香六月激情综合啪 | 婷婷丁香六月激情综合啪 | 麻豆果冻传媒2021精品传媒一区下载 | 97se亚洲精品一区 | 波多野结衣av一区二区全免费观看 | 性欧美熟妇videofreesex | 噜噜噜亚洲色成人网站 | 国产精品人人爽人人做我的可爱 | 伊在人天堂亚洲香蕉精品区 | 未满小14洗澡无码视频网站 | 欧美freesex黑人又粗又大 | 亚洲熟妇色xxxxx欧美老妇y | 国产精品办公室沙发 |