欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > PHP如何初始化PDO及原始SQL語句操作

PHP如何初始化PDO及原始SQL語句操作

熱門標簽:銀行信貸電話機器人 上海400客服電話怎么申請 滄州電銷外呼系統價格 凱立德地鐵站地圖標注 合肥ai電銷機器人費用 溫州外呼系統招商 天津電銷外呼系統違法嗎 手機外呼系統什么原理 400電話個人能不能辦理

PDO 實例

首先來看看一個 PDO 實例是如何初始化的。

$dns = 'mysql:host=localhost;dbname=blog_test;port=3306;charset=utf8';
$pdo = new PDO($dns, 'root', '');

普通情況下,我們直接實例化的時候傳遞構造參數就可以獲得一個 PDO 對象。這樣,我們就和數據庫建立了連接。如果連接失敗,也就是參數寫得有問題的時候,在實例化時直接就會報異常。

PDO 對象的參數包括 DNS 信息、用戶名、密碼,另外還有一個參數就是可以設置 PDO 連接的一些屬性,我們將在后面看到它的使用。

dns 參數

PDO 構造參數的第一個參數是一個 DNS 字符串。在這個字符串中使用分號 ; 分隔不同的參數內容。它里面可以定義的內容包括:

  • DSN prefix,也就是我們要連接的數據庫類型,MySQL 數據庫一般都是直接使用 mysql: 這樣來定義即可。
  • host,連接的地址,在這里我們連接的是本地數據庫 localhost
  • port,端口號,MySQL 默認為 3306 ,可以不寫
  • dbname,要連接的數據庫名稱
  • unix_socket,可以指定 MySQL 的 Unix Socket 文件
  • charset,連接的字符集

我們可以通過一個函數來查看當前 PHP 環境中所支持的數據庫擴展都有哪些:

print_r(PDO::getAvailableDrivers());exit;
// Array
// (
//     [0] => dblib
//     [1] => mysql
//     [2] => odbc
//     [3] => pgsql
//     [4] => sqlite
// )

PDO 對象屬性

PDO 構造參數的最后一個參數可以設置連接的一些屬性,如:

$pdo = new PDO($dns, 'root', '', [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
showPdoAttribute($pdo);
// ……
// PDO::ATTR_ERRMODE: 2
// ……

showPdoAttribute() 方法是我們自己封裝的一個展示所有連接屬性的函數。

// 顯示pdo連接屬性
function showPdoAttribute($pdo){
    $attributes = array(
        "DRIVER_NAME", "AUTOCOMMIT", "ERRMODE", "CASE", "CLIENT_VERSION", "CONNECTION_STATUS",
        "ORACLE_NULLS", "PERSISTENT", "SERVER_INFO", "SERVER_VERSION"
    );
    
    foreach ($attributes as $val) {
        echo "PDO::ATTR_$val: ";
        echo $pdo->getAttribute(constant("PDO::ATTR_$val")) . "\n";
    }
}

在這個函數中,我們使用 PDO 實例的 getAttribute() 方法來獲取相應的屬性值。在沒有設置 PDO::ATTR_ERRMODE 時,它的默認值為 0 ,也就是 PDO::ERRMODE_SILENT 常量所對應的值。在上述代碼中,我們將它設置為了 PDO::ERRMODE_EXCEPTION ,查看屬性輸出的結果就變成了 2 。

除了在構造函數的參數中設置屬性外,我們也可以使用 PDO 實例的 setAttribute() 方法來設置 PDO 的屬性值。

pdo2 = new PDO($dns, 'root', '', [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);

echo $pdo2->getAttribute(PDO::ATTR_DEFAULT_FETCH_MODE), PHP_EOL;
// 4

// 設置屬性
$pdo2->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
echo $pdo2->getAttribute(PDO::ATTR_DEFAULT_FETCH_MODE), PHP_EOL;
// 2

在這段代碼中,我們設置 PDO::ATTR_DEFAULT_FETCH_MODE 為 PDO::FETCH_ASSOC 。這樣,在使用這個 $pdo2 的連接進行查詢時,輸出的結果都會是以數組鍵值對形式返回的內容。我們馬上就進入查詢方面相關函數的學習。

查詢語句

大多數情況下,使用 PDO 我們都會用它的預處理能力來編寫 SQL 語句,一來是性能更好,二來是更加安全。不過我們今天先不講預處理方面的問題,還是以最原始的直接操作 SQL 語句的方式學習相關的一些函數。

普通查詢及遍歷

// 普通查詢 - 遍歷1
$stmt = $pdo->query('select * from zyblog_test_user limit 5');
foreach ($stmt as $row) {
    var_dump($row);
}

// array(8) {
//     ["id"]=>
//     string(3) "204"
//     [0]=>
//     string(3) "204"
//     ["username"]=>
//     string(5) "three"
//     [1]=>
//     string(5) "three"
//     ["password"]=>
//     string(6) "123123"
//     [2]=>
//     string(6) "123123"
//     ["salt"]=>
//     string(3) "ccc"
//     [3]=>
//     string(3) "ccc"
//   }
//   ……

// 普通查詢 - 遍歷2
$stmt = $pdo->query('select * from zyblog_test_user limit 5');

while ($row = $stmt->fetch()) {
    var_dump($row);
}

// array(8) {
//     ["id"]=>
//     string(3) "204"
//     [0]=>
//     string(3) "204"
//     ["username"]=>
//     string(5) "three"
//     [1]=>
//     string(5) "three"
//     ["password"]=>
//     string(6) "123123"
//     [2]=>
//     string(6) "123123"
//     ["salt"]=>
//     string(3) "ccc"
//     [3]=>
//     string(3) "ccc"
//   }
//   ……

PDO 實例的 query() 方法就是執行一條查詢語句,并返回一個 PDOStatement 對象。通過遍歷這個對象,就可以獲得查詢出來的數據結果集。

在代碼中,我們使用了兩種方式來遍歷,其實它們的效果都是一樣的。在這里,我們要關注的是返回的數據格式。可以看出,數據是以數組格式返回的,并且是以兩種形式,一個是數據庫定義的鍵名,一個是以下標形式。

查詢結果集(數組、對象)

其實大部分情況下,我們只需要數據庫鍵名的那種鍵值對形式的數據就可以了。這個有兩種方式,一是直接使用上文中我們定義好默認 PDO::ATTR_DEFAULT_FETCH_MODE 屬性的 $pdo2 連接,另一個就是在查詢的時候為 query() 方法指定屬性。

$stmt = $pdo2->query('select * from zyblog_test_user limit 5');
foreach ($stmt as $row) {
    var_dump($row);
}
// array(4) {
//     ["id"]=>
//     string(1) "5"
//     ["username"]=>
//     string(3) "two"
//     ["password"]=>
//     string(6) "123123"
//     ["salt"]=>
//     string(3) "bbb"
//   }
//   ……

$stmt = $pdo->query('select * from zyblog_test_user limit 5', PDO::FETCH_ASSOC);
foreach ($stmt as $row) {
    var_dump($row);
}
// array(4) {
//     ["id"]=>
//     string(1) "5"
//     ["username"]=>
//     string(3) "two"
//     ["password"]=>
//     string(6) "123123"
//     ["salt"]=>
//     string(3) "bbb"
//   }
//   ……

當然,我們也可以直接讓數據返回成對象的格式,同樣的也是使用預定義的常量來指定 query() 或者 PDO 實例連接的屬性就可以了。

$stmt = $pdo->query('select * from zyblog_test_user limit 5', PDO::FETCH_OBJ);
foreach ($stmt as $row) {
    var_dump($row);
}
// object(stdClass)#4 (4) {
//     ["id"]=>
//     string(1) "5"
//     ["username"]=>
//     string(3) "two"
//     ["password"]=>
//     string(6) "123123"
//     ["salt"]=>
//     string(3) "bbb"
//   }
//   ……

查詢結果集(類)

上面返回對象形式的結果集中的對象是 stdClass 類型,也就是 PHP 的默認類類型。那么我們是否可以自己定義一個類,然后在查詢完成后直接生成它的結果集呢?就是像是 ORM 框架一樣,完成數據到對象的映射。既然這么說了,那當然是可以的啦,直接看代碼。

class user
{
    public $id;
    public $username;
    public $password;
    public $salt;

    public function __construct()
    {
        echo 'func_num_args: ' . func_num_args(), PHP_EOL;
        echo 'func_get_args: ';
        var_dump(func_get_args());
    }
}

class user2
{

}
// 返回指定對象
$u = new user;
$stmt = $pdo->query('select * from zyblog_test_user limit 5', PDO::FETCH_INTO, $u);
foreach ($stmt as $row) {
    var_dump($row);
}
// object(user)#3 (4) {
//     ["id"]=>
//     string(1) "5"
//     ["username"]=>
//     string(3) "two"
//     ["password"]=>
//     string(6) "123123"
//     ["salt"]=>
//     string(3) "bbb"
//   }
//   ……

// 空類測試
$u = new user2;
$stmt = $pdo->query('select * from zyblog_test_user limit 5', PDO::FETCH_INTO, $u);
foreach ($stmt as $row) {
    var_dump($row);
}

// object(user2)#2 (4) {
//     ["id"]=>
//     string(1) "5"
//     ["username"]=>
//     string(3) "two"
//     ["password"]=>
//     string(6) "123123"
//     ["salt"]=>
//     string(3) "bbb"
//   }
//   ……

在這段代碼中,我們定義了兩個類,user 類有完整的和數據庫字段對應的屬性,還定義了一個構造方法(后面會用到)。而 user2 類則是一個空的類。通過測試結果來看,類的屬性對于 PDO 來說并不重要。它會默認創建數據庫查詢到的字段屬性,并將它賦值給對象。那么假如我們定義了一個 const 常量屬性并給予相同的字段名稱呢?大家可以自己嘗試一下。

對于 user 和 user2 來說,我們將它實例化了并傳遞給了 query() ,并且指定了結果集格式為 PDO::FETCH_INTO ,這樣就實現了獲取對象結果集的能力。但是 PDO 遠比你想象的強大,我們還可以直接用類模板來獲取查詢結果集。

// 根據類返回指定對象
$stmt = $pdo->query('select * from zyblog_test_user limit 5', PDO::FETCH_CLASS, 'user', ['x1', 'x2']);
foreach ($stmt as $row) {
    var_dump($row);
}
// func_num_args: 2
// func_get_args: array(2) {
//   [0]=>
//   string(2) "x1"
//   [1]=>
//   string(2) "x2"
// }
// object(user)#4 (4) {
//   ["id"]=>
//   string(1) "5"
//   ["username"]=>
//   string(3) "two"
//   ["password"]=>
//   string(6) "123123"
//   ["salt"]=>
//   string(3) "bbb"
// }
// ……

query() 方法直接使用查詢結果集模式為 PDO::FETCH_CLASS ,并傳遞一個類模板的名稱,PDO 就會在當前代碼中查找有沒有對應的類模板,獲得的每個結果都會實例化一次。在這里,我們又多了一個參數,最后一個參數是一個數組,并且給了兩個元素。估計有不少小伙伴已經看出來了,這個參數是傳遞給類的構造方法的。記住,使用這個模式,每個元素都會實例化一次,結果集中的每個元素都是新創建的類(object(user2)#3,#號后面的數字是不同的對象句柄id),而 PDO::FETCH_INTO 則是以引用的形式為每個元素賦值(object(user2)#3,#號后面的數字是相同的對象句柄id)。也就是說,我們使用 PDO::FETCH_INTO 模式的時候,修改一個元素的值,其它的元素也會跟著改變,如果使用一個數組去記錄遍歷的元素值,最后數組的結果也會是相同的最后一個元素的內容。

$stmt = $pdo->query('select * from zyblog_test_user limit 5', PDO::FETCH_INTO, $u);
$resArr = [];
foreach ($stmt as $row) {
    var_dump($row);
    $resArr[] = $row;
}
$resArr[0]->id = 55555;
print_r($resArr);
// Array
// (
//     [0] => user2 Object
//         (
//             [id] => 55555
//             [username] => two
//             [password] => 123123
//             [salt] => bbb
//         )

//     [1] => user2 Object
//         (
//             [id] => 55555
//             [username] => two
//             [password] => 123123
//             [salt] => bbb
//         )

//     [2] => user2 Object
//         (
//             [id] => 55555
//             [username] => two
//             [password] => 123123
//             [salt] => bbb
//         )

//     [3] => user2 Object
//         (
//             [id] => 55555
//             [username] => two
//             [password] => 123123
//             [salt] => bbb
//         )

//     [4] => user2 Object
//         (
//             [id] => 55555
//             [username] => two
//             [password] => 123123
//             [salt] => bbb
//         )

// )

如何解決這個問題呢?最簡單的方式就是在數組賦值的時候加個 clone 關鍵字唄!

查詢結果集(指定字段)

最后輕松一點,我們看下 query() 方法還可以指定查詢的某一個字段。

// 只返回第幾個字段
$stmt = $pdo->query('select * from zyblog_test_user limit 5', PDO::FETCH_COLUMN, 2);
foreach ($stmt as $row) {
    var_dump($row);
}
// string(32) "bbff8283d0f90625015256b742b0e694"
// string(6) "123123"
// string(6) "123123"
// string(6) "123123"
// string(6) "123123"

增、刪、改操作

除了查詢之外的操作,我們也可以使用 exec() 方法來執行其他一些相應的 SQL 語句。

增加操作

$count = $pdo->exec("insert into zyblog_test_user(`username`, `password`, `salt`) value('akk', 'bkk', 'ckk')");
$id = $pdo->lastInsertId();

var_dump($count); // int(1)
var_dump($id); // string(3) "205"

exec() 返回的是影響的行數,如果我們執行這一條 SQL ,返回的就是成功添加了一行數據。如果要獲得新增加數據的 id ,就要使用 lastInserId() 方法來獲取。

$count = $pdo->exec("insert into zyblog_test_user(`username`, `password`, `salt`) value('akk', 'bkk', 'ckk', 'dkk')");
// Fatal error: Uncaught PDOException: SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1

執行錯誤的 SQL 語句,就像根據 PDO::ATTR_ERRMODE 屬性的設置來返回錯誤信息。我們在最上面的實例化 PDO 代碼中指定了錯誤形式是異常處理模式,所以這里直接就會報 PDOException 異常。

修改操作

// 正常更新
$count = $pdo->exec("update zyblog_test_user set `username`='aakk' where id='{$id}'");

var_dump($count); // int(1)

// 數據不變更新
$count = $pdo->exec("update zyblog_test_user set `username`='aakk' where id='{$id}'");
var_dump($count); // int(0)

// 條件錯誤更新
$count = $pdo->exec("update zyblog_test_user set `username`='aakk' where id='123123123123'");
var_dump($count); // int(0)
echo '===============', PHP_EOL;

同樣的,在執行更新操作的時候,exec() 返回的也是受影響的行數。很多小伙伴會以這個進行判斷是否更新成功,但如果數據沒有修改,那么它返回的將是 0 ,SQL 語句的執行是沒有問題的,邏輯上其實也沒有問題。比如我們在后臺打開了某條數據查看,然后并不想更新任何內容就直接點了提交,這時候不應該出現更新失敗的提示。也就是說,在前端判斷更新操作的時候,需要判斷字段是否都有改變,如果沒有改變的話那么不應該提示更新失敗。這一點是業務邏輯上的考慮問題,如果你認為這樣也是更新失敗的話,那么這么報錯也沒有問題,一切以業務形式為主。

刪除操作

$count = $pdo->exec("delete from zyblog_test_user where id = '{$id}'");
var_dump($count); // int(1)

// 條件錯誤刪除
$count = $pdo->exec("delete from zyblog_test_user where id = '5555555555'");
var_dump($count); // int(0)

刪除操作需要注意的問題和更新操作是一樣的,那就是同樣的 exec() 只是返回影響行數的問題,不過相對于更新操作來說,沒有受影響的行數那肯定是刪除失敗的,沒有數據被刪除。同樣的,這個失敗的提示也請根據業務情況來具體分析。

總結

不學不知道,一學嚇一跳吧,簡簡單的一個 PDO 的創建和語句執行竟然有這么多的內容。對于我們的日常開發來說,掌握這些原理能夠避免很多莫名其妙的問題,比如上面 exec() 只是返回影響行數在業務開發中如何判斷操作是否成功的問題就很典型。好了,這只是第一篇,后面的學習不要落下了哦!

測試代碼

以上就是PHP如何初始化PDO及原始SQL語句操作的詳細內容,更多關于PHP 初始化PDO及原始SQL語句操作的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • PHP PDO預處理語句及事務的使用
  • PHP中PDO關閉連接的方法問題
  • PHP使用PDO 連接與連接管理操作實例分析
  • php+pdo實現的購物車類完整示例
  • PHP使用PDO實現mysql防注入功能詳解
  • PHP PDO和消息隊列的個人理解與應用實例分析
  • php pdo連接數據庫操作示例
  • PHP連接MySQL數據庫的三種方式實例分析【mysql、mysqli、pdo】
  • PHP使用PDO創建MySQL數據庫、表及插入多條數據操作示例
  • php如何用PDO操作大數據對象

標簽:赤峰 七臺河 溫州 酒泉 白城 洛陽 金華 怒江

巨人網絡通訊聲明:本文標題《PHP如何初始化PDO及原始SQL語句操作》,本文關鍵詞  PHP,如何,初始化,PDO,及,原始,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP如何初始化PDO及原始SQL語句操作》相關的同類信息!
  • 本頁收集關于PHP如何初始化PDO及原始SQL語句操作的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    国产精品无码电影| 欧美理论在线播放| 国产日韩精品一区| 久久激情综合网| 成人午夜福利一区二区| 日韩情涩欧美日韩视频| 日韩中文字幕区一区有砖一区 | 2021国产精品久久精品| 日本午夜一本久久久综合| 日本不卡视频一区| 91精品国产一区二区三区| 丝袜美腿一区二区三区| 风间由美一二三区av片| 日韩精品一区二区三区视频在线观看 | 最新av电影网站| 中文字幕不卡在线| 不卡的av电影| 午夜写真片福利电影网| 亚洲日本va在线观看| 两女双腿交缠激烈磨豆腐| 欧美色老头old∨ideo| 亚洲一区二区欧美日韩| 国产成人av无码精品| 日韩欧美另类在线| 久久99精品视频| 性爱在线免费视频| 中文字幕在线不卡一区| 91免费国产在线观看| 欧美日韩成人综合天天影院| 日韩高清在线不卡| 高清国产在线观看| 国产精品国产三级国产aⅴ原创 | 一本色道久久综合亚洲91 | 久久国产高清视频| 亚洲免费资源在线播放| 国产免费无码一区二区| 日韩一区二区三区高清免费看看| 麻豆成人91精品二区三区| 日本不卡一区视频| 亚洲免费观看高清完整版在线观看熊 | 国产区在线观看成人精品| 成人精品免费网站| 欧美日韩三级一区二区| 蜜桃久久久久久久| 麻豆明星ai换脸视频| 亚洲一区二区在线观看视频| 精品少妇一区二区三区免费观| 久久精品亚洲一区二区三区浴池| 成人97人人超碰人人99| 91精品国产综合久久福利软件| 激情亚洲综合在线| 在线看一区二区| 青青草一区二区三区| 欧美一区免费观看| 午夜电影一区二区三区| 亚洲av无一区二区三区| 亚洲国产视频网站| 一级特黄曰皮片视频| 亚洲精品高清在线观看| 日韩精品电影一区二区| 亚洲欧洲www| 超碰97人人干| 亚洲精品视频在线| 免费网站在线高清观看| 一区二区三区精品在线观看| 日本xxxxxxxxx18| 伊人色综合久久天天人手人婷| a天堂中文字幕| 一区二区视频在线看| 91成人精品一区二区| 亚洲国产精品久久不卡毛片 | 成人aa视频在线观看| 欧美xxxxx裸体时装秀| 99热国产精品| 国产婷婷一区二区| 欧美做受喷浆在线观看| 亚洲日本丝袜连裤袜办公室| 老熟妇一区二区| 亚洲午夜激情网页| 欧美国产日韩在线观看成人| 蜜乳av一区二区| 欧美日韩精品一区视频| 粉嫩av一区二区三区| 日韩丝袜美女视频| 野花视频免费在线观看| 中文av一区二区| 欧美 日韩 成人| 亚洲va国产va欧美va观看| 色哟哟日韩精品| 国产一区二区伦理片| 日韩女同互慰一区二区| 波多野结衣三级视频| 欧美国产欧美综合| 成人在线一级片| 日韩成人精品在线观看| 欧美日韩久久不卡| 91在线精品一区二区| 国产精品欧美久久久久无广告 | 亚洲sss视频在线视频| 欧洲猛交xxxx乱大交3| 国产一区二区三区电影在线观看| 日韩午夜精品电影| www.四虎在线| 亚洲一线二线三线视频| 色美美综合视频| 成人激情免费网站| 国产精品视频观看| 欧美人与禽zoz0善交| 久久se精品一区精品二区| 欧美一卡二卡在线观看| 中国特级黄色大片| 亚洲一区二区在线视频| 欧美色综合影院| 91在线小视频| 亚洲人成网站色在线观看| 我要看黄色一级片| 国产精品18久久久久久久久久久久| 久久久精品天堂| 国产又粗又猛又爽又黄的视频四季 | 日本亚洲免费观看| 日韩欧美一区二区久久婷婷| 好吊色视频一区二区三区| 亚洲高清不卡在线观看| 欧美日韩一级片在线观看| 国产调教打屁股xxxx网站| 亚洲夂夂婷婷色拍ww47| 欧美亚洲高清一区二区三区不卡| 91在线视频免费91| 一级做a爱片久久| 欧美人妖巨大在线| 看全色黄大色黄女片18| 日韩av一二三| 精品国产免费一区二区三区香蕉| 性久久久久久久久久| 精品一区精品二区高清| 国产亚洲污的网站| √天堂中文官网8在线| 99久久er热在这里只有精品66| 亚洲精品免费在线播放| 欧美三级电影在线观看| 黄色网址在线视频| 美国三级日本三级久久99| 久久婷婷一区二区三区| 日韩欧美视频免费观看| 成人国产精品免费观看| 一区二区三区四区乱视频| 欧美电影在线免费观看| 国产精品无码久久久久一区二区| 国产一区二区三区在线观看免费视频 | 欧美日韩国产电影| 少妇饥渴放荡91麻豆| 黑人精品欧美一区二区蜜桃| 国产精品国产三级国产普通话蜜臀| 91福利在线看| 加勒比精品视频| 国产一区二区中文字幕| 综合av第一页| 6080午夜不卡| 潮喷失禁大喷水aⅴ无码| 99视频精品全部免费在线| 天堂精品中文字幕在线| 久久久国产精品麻豆| 色综合天天综合色综合av| 91传媒理伦片在线观看| 久久精品二区亚洲w码| 国产精品高清亚洲| 欧美精品第1页| 精品人体无码一区二区三区| 99久久99久久精品免费看蜜桃| 午夜日韩在线观看| 国产日韩欧美制服另类| 欧美视频一区二区三区| 国产美女免费无遮挡| 99精品视频在线免费观看| 日本欧美一区二区三区| 国产精品素人视频| 宅男噜噜噜66一区二区66| 亚洲午夜精品久久久久久高潮| 9久草视频在线视频精品| 日本大胆欧美人术艺术动态| 国产精品久久久久9999吃药| 91精品国产手机| 全网免费在线播放视频入口 | 国产精品一区在线观看你懂的| 一区二区三区四区激情| 久久亚洲一区二区三区明星换脸 | 午夜精品一区二区三区视频| 中文字幕天堂av| 国产91富婆露脸刺激对白| 视频在线观看91| 日韩一区在线播放| 精品精品欲导航| 欧美色手机在线观看| 亚洲一级理论片| 亚洲国产精品无码久久久久高潮| 高潮精品一区videoshd| 日韩高清在线不卡| 亚洲激情图片一区| 亚洲国产精品精华液2区45| 日韩欧美国产一区在线观看|