日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 學院 > 開發設計 > 正文

oracle資料庫函式庫

2019-11-18 21:37:50
字體:
來源:轉載
供稿:網友
<?
class DB_Sql {
var $Debug = false;
var $Home = "/u01/app/Oracle/PRoduct/8.0.4";
var $Remote = 1;
/* This Query will be sent directly after the first connection
Example:
var $ConnectQuery="ALTER session SET nls_date_language=german nls_date_format='DD.MM.RRRR'";
-> Set the date format for this session, this is fine when your ora-role
cannot be altered */
var $ConnectQuery='';
/* Due to a strange error with Oracle 8.0.5, Apache and php3.0.6
you don't need to set the ENV - on my system Apache
will change to a zombie, if I don't set this to FALSE!
Instead I set these ENV-vars before the startup of apache.
If unsure try it out, if it works. */
var $OraPutEnv = true;

var $Database = "";
var $User = "";
var $PassWord = "";

var $Link_ID = 0;
var $Query_ID = 0;
var $Record = array();
var $Row;

var $Errno = 0;
var $Error = "";
var $ora_no_next_fetch=false;


/* copied from db_MySQL for completeness */
/* public: identification constant. never change this. */
var $type = "oracle";
var $revision = "Revision: 1.3";
var $Halt_On_Error = "yes"; ## "yes" (halt with message), "no" (ignore errors quietly), "report" (ignore errror, but spit a warning)

/* public: constructor */
function DB_Sql($query = "") {
$this->query($query);
}

/* public: some trivial reporting */
function link_id() {
return $this->Link_ID;
}

function query_id() {
return $this->Query_ID;
}

function connect() {
## see above why we do this
if ($this->OraPutEnv) {
PutEnv("ORACLE_SID=$this->Database");
PutEnv("ORACLE_HOME=$this->Home");
}
if ( 0 == $this->Link_ID ) {
if($this->Debug) {
printf("<br>Connect()ing to $this->Database...<br>n");
}
if($this->Remote) {
if($this->Debug) {
printf("<br>connect() $this->User/******@$this->Database<br>n");
}  
$this->Link_ID=ora_plogon
("$this->User/$this->Password@$this->Database","");
/************** (comment by SSilk)
this dosn't work on my system:
$this->Link_ID=ora_plogon
("$this->User@$this->Database.world","$this->Password");
***************/
} else {
if($this->Debug) {
printf("<br>connect() $this->User, $this->Password <br>n");
}  
$this->Link_ID=ora_plogon("$this->User","$this->Password");
/* (comment by SSilk: don't know how this could work, but I leave this untouched!) */
}
if($this->Debug) {
printf("<br>connect() Link_ID: $this->Link_ID<br>n");
}
if (!$this->Link_ID) {
$this->halt("connect() Link-ID == false " .
"($this->Link_ID), ora_plogon failed");
} else {
//echo "commit on<p>";
ora_commiton($this->Link_ID);
}
if($this->Debug) {
printf("<br>connect() Obtained the Link_ID: $this->Link_ID<br>n");
}
## Execute Connect Query
if ($this->ConnectQuery) {
$this->query($this->ConnectQuery);
}
}
}

## In order to increase the # of cursors per system/user go edit the
## init.ora file and increase the max_open_cursors parameter. Yours is on
## the default value, 100 per user.
## We tried to change the behaviour of query() in a way, that it tries
## to safe cursors, but on the other side be carefull with this, that you
## don't use an old result.
##  
## You can also make extensive use of ->disconnect()!
## The unused QueryIDs will be recycled sometimes.  

function query($Query_String)  
{

/* No empty query please. */
if (empty($Query_String))
{
return 0;
}

$this->connect();
$this->lastQuery=$Query_String;

if (!$this->Query_ID) {
$this->Query_ID= ora_open($this->Link_ID);
}
if($this->Debug) {
printf("Debug: query = %s<br>n", $Query_String);
printf("<br>Debug: Query_ID: %d<br>n", $this->Query_ID);
}

if(!@ora_parse($this->Query_ID,$Query_String)) {
$this->Errno=ora_errorcode($this->Query_ID);
$this->Error=ora_error($this->Query_ID);
$this->halt("<BR>ora_parse() failed:<BR>$Query_String<BR><small>Snap & paste this to sqlplus!</SMALL>");
} elseif (!@ora_exec($this->Query_ID)) {
$this->Errno=ora_errorcode($this->Query_ID);
$this->Error=ora_error($this->Query_ID);
$this->halt("<BR>n$Query_Stringn<BR><small>Snap & paste this to sqlplus!</SMALL>");
}

$this->Row=0;

if(!$this->Query_ID) {
$this->halt("Invalid SQL: ".$Query_String);
}

return $this->Query_ID;
}

function next_record() {
if (!$this->ora_no_next_fetch &&  
0 == ora_fetch($this->Query_ID)) {
if ($this->Debug) {
printf("<br>next_record(): ID: %d Row: %d<br>n",
$this->Query_ID,$this->Row+1);
// more info for $this->Row+1 is $this->num_rows(),
// but dosn't work in all cases (complicated selects)
// and it is very slow here
}
$this->Row +=1;

$errno=ora_errorcode($this->Query_ID);
if(1403 == $errno) { # 1043 means no more records found
$this->Errno=0;
$this->Error="";
$this->disconnect();
$stat=0;
} else {
$this->Error=ora_error($this->Query_ID);
$this->Errno=$errno;
if($this->Debug) {
printf("<br>%d Error: %s",
$this->Errno,
$this->Error);
}
$stat=0;
}
} else {
$this->ora_no_next_fetch=false;
for($ix=0;$ix<ora_numcols($this->Query_ID);$ix++) {
$col=strtolower(ora_columnname($this->Query_ID,$ix));
$value=ora_getcolumn($this->Query_ID,$ix);
$this->Record[ "$col" ] = $value;
$this->Record[ $ix ] = $value;
#DBG echo"<b>[$col]</b>: $value <br>n";
}
$stat=1;
}

return $stat;
}

## seek() works only for $pos - 1 and $pos
## Perhaps I make a own implementation, but my
## opinion is, that this should be done by PHP3
function seek($pos) {
if ($this->Row - 1 == $pos) {
$this->ora_no_next_fetch=true;
} elseif ($this->Row == $pos ) {
## do nothing
} else {
$this->halt("Invalid seek(): Position is cannot be handled by API.<BR>".
"Only a seek to the last element is allowed in this version<BR>".
"Difference too big. Wanted: $pos Current pos: $this->Row");
}
if ($this->Debug) echo "<BR>Debug: seek = $pos<BR>";
$this->Row=$pos;
}

function lock($table, $mode = "write") {
if ($mode == "write") {
$result = ora_do($this->Link_ID, "lock table $table in row exclusive mode");
} else {
$result = 1;
}
return $result;
}

function unlock() {
return ora_do($this->Link_ID, "commit");
}

// Important note: This function dosn't work with Oracle-Database-Links!
// You are free to get a better method. :)
function metadata($table,$full=false) {
$count = 0;
$id = 0;
$res = array();

/*
* Due to compatibility problems with Table we changed the behavior
* of metadata();
* depending on $full, metadata returns the following values:
*
* - full is false (default):
* $result[]:
* [0]["table"] table name
* [0]["name"] field name
* [0]["type"] field type
* [0]["len"] field length
* [0]["flags"] field flags ("NOT NULL", "INDEX")
* [0]["format"] precision and scale of number (eg. "10,2") or empty
* [0]["index"] name of index (if has one)
* [0]["chars"] number of chars (if any char-type)
*
* - full is true
* $result[]:
* ["num_fields"] number of metadata records
* [0]["table"] table name
* [0]["name"] field name
* [0]["type"] field type
* [0]["len"] field length
* [0]["flags"] field flags ("NOT NULL", "INDEX")
* [0]["format"] precision and scale of number (eg. "10,2") or empty
* [0]["index"] name of index (if has one)
* [0]["chars"] number of chars (if any char-type)
* [0]["php_type"] the correspondig PHP-type
* [0]["php_subtype"] the subtype of PHP-type
* ["meta"][field name] index of field named "field name"
* This could used, if you have the name, but no index-num - very fast
* Test: if (isset($result['meta']['myfield'])) {} ...
*/

$this->connect();

## This is a RIGHT OUTER JOIN: "(+)", if you want to see, what
## this query results try the following:
## $table = new Table; $db = new my_DB_Sql; # you have to make
## # your own class
## $table->show_results($db->query(see query vvvvvv))
##
$this->query("SELECT T.table_name,T.column_name,T.data_type,".
"T.data_length,T.data_precision,T.data_scale,T.nullable,".
"T.char_col_decl_length,I.index_name".
" FROM ALL_TAB_COLUMNS T,ALL_IND_COLUMNS I".
" WHERE T.column_name=I.column_name (+)".
" AND T.table_name=I.table_name (+)".
" AND T.table_name=UPPER('$table') ORDER BY T.column_id");

$i=0;
while ($this->next_record()) {
$res[$i]["table"] = $this->Record[table_name];
$res[$i]["name"] = strtolower($this->Record[column_name]);
$res[$i]["type"] = $this->Record[data_type];
$res[$i]["len"] = $this->Record[data_length];
if ($this->Record[index_name]) $res[$i]["flags"] = "INDEX ";
$res[$i]["flags"] .= ( $this->Record[nullable] == 'N') ? '' : 'NOT NULL';
$res[$i]["format"]= (int)$this->Record[data_precision].",".
(int)$this->Record[data_scale];
if ("0,0"==$res[$i]["format"]) $res[$i]["format"]='';
$res[$i]["index"] = $this->Record[index_name];
$res[$i]["chars"] = $this->Record[char_col_decl_length];
if ($full) {
$j=$res[$i]["name"];
$res["meta"][$j] = $i;
$res["meta"][strtoupper($j)] = $i;
switch ($res[$i]["type"]) {
case "VARCHAR2" :
case "VARCHAR" :
case "CHAR" :
$res["php_type"]="string";
$res["php_subtype"]="";
break;
case "DATE" :
$res["php_type"]="string";
$res["php_subtype"]="date";
break;
case "BLOB" :
case "CLOB" :
case "BFILE" :
case "RAW" :
case "LONG" :
case "LONG RAW" :
$res["php_type"]="string";
$res["php_subtype"]="blob";
break;
case "NUMBER" :
if ($res[$i]["format"]) {
$res["php_type"]="double";
$res["php_subtype"]="";
} else {
$res["php_type"]="int";
$res["php_subtype"]="";
}
break;
default :
$this->halt("metadata(): Type is not a valid value: '$res[$i][type]'");
break;
}
}
if ($full) $res["meta"][$res[$i]["name"]] = $i;
$i++;
}
if ($full) $res["num_fields"]=$i;
# $this->disconnect();
return $res;
}

## THIS FUNCTION IS UNSTESTED!
function affected_rows() {
if ($this->Debug) echo "<BR>Debug: affected_rows=". ora_numrows($this->Query_ID)."<BR>";
return ora_numrows($this->Query_ID);
}

## Known bugs: It will not work for SELECT DISTINCT and any
## other constructs which are depending on the resulting rows.
## So you *really need* to check every query you make, if it
## will work with it!
##
## Also, for a qualified replacement you need to parse the
## selection, cause this will fail: "SELECT id, from FROM ...").
## "from" is - as far as I know a keyword in Oracle, so it can
## only be used in this way. But you have been warned.
function num_rows() {
$curs=ora_open($this->Link_ID);

## this is the important part and it is also the HACK!
if (eregi("^[[:space:]]*SELECT[[:space:]]",$this->lastQuery) )  
{

# This works for all?? cases, including SELECT DISTINCT case.
# We just make select count(*) from original sql expression
# and remove ORDER BY (if any) for speed
# I like regular expressions too ;-)))  
$q = sprintf("SELECT COUNT(*) FROM (%s)",
@eregi_Replace("ORDER[[:space:]]+BY[^)]*()*)", "/1",  
$this->lastQuery)  
);

# works also for subselects:
# if (eregi("[[:space:]]+FROM([[:space:]]+.*[[:space:]]+FROM)",$this->lastQuery,$r))
# $areplace=$r[1];
# $q=eregi_Replace("^[[:space:]]*SELECT[[:space:]]+".
# ".*[[:space:]]+FROM",
# "SELECT COUNT(*) FROM$areplace",
# $this->lastQuery);

if ($this->Debug) echo "<BR>Debug: num_rows: $q<BR>";

ORA_parse($curs,$q);
ORA_exec($curs);
ORA_fetch($curs);
$result = ORA_getcolumn($curs,0);
ORA_close($curs);
if ($this->Debug)
{  
echo "<BR>Debug: ID ".$this->QueryID.
" num_rows=". $result ."<BR>";
}
return $result;
}  
else  
{
$this->halt("Last Query was not a SELECT: $this->lastQuery");
}
}

function num_fields() {
if ($this->Debug) echo "<BR>Debug: num_fields=". ora_numcols($this->Query_ID) . "<BR>";
return ora_numcols($this->Query_ID);
}

function nf() {
return $this->num_rows();
}

function np() {
print $this->num_rows();
}

function f($Name) {
return $this->Record[$Name];
}

function p($Name) {
print $this->Record[$Name];
}

/* public: sequence number */
function nextid($seq_name)
{
$this->connect();

/* Independent Query_ID */
$Query_ID = ora_open($this->Link_ID);

if(!@ora_parse($Query_ID,"SELECT $seq_name.NEXTVAL FROM DUAL"))  
{
// There is no such sequence yet, then create it
if(!@ora_parse($Query_ID,"CREATE SEQUENCE $seq_name")  
||
!@ora_exec($Query_ID)
)
{
$this->halt("<BR> nextid() function - unable to create sequence");
return 0;
}
@ora_parse($Query_ID,"SELECT $seq_name.NEXTVAL FROM DUAL");
}  
if (!@ora_exec($Query_ID)) {
$this->halt("<BR>ora_exec() failed:<BR>nextID function");
}
if (@ora_fetch($Query_ID) ) {
$next_id = ora_getcolumn($Query_ID, 0);
}
else {
$next_id = 0;
}
if ( $Query_ID > 0 ) {
ora_close($Query_ID);
}

return $next_id;
}

function disconnect() {
if($this->Debug) {
echo "Debug: Disconnecting $this->Query_ID...<br>n";
}
if ( $this->Query_ID < 1 ) {
echo "<B>Warning</B>: disconnect(): Cannot free ID $this->Query_IDn";
# return();
}
ora_close($this->Query_ID);
$this->Query_ID=0;
}

/* private: error handling */
function halt($msg) {
if ($this->Halt_On_Error == "no")
return;

$this->haltmsg($msg);

if ($this->Halt_On_Error != "report")
die("Session halted.");
}

function haltmsg($msg) {
printf("</td></tr></table><br><b>Database error:</b> %s<br>n", $msg);
printf("<b>Oracle Error</b>: %s (%s)<br>n",
$this->Errno,
$this->Error);
}

function table_names() {
$this->connect();
$this->query("
SELECT table_name,tablespace_name
FROM user_tables");
$i=0;
while ($this->next_record())
{
$info[$i]["table_name"] =$this->Record["table_name"];
$info[$i]["tablespace_name"]=$this->Record["tablespace_name"];
$i++;
}  
return $info;
}


// Some transaction support
// Methods are used in ct_oracle.inc
function begin_transaction()  
{
$this->connect();
// Now, disable autocommit
Ora_CommitOff($this->Link_ID);
if ($this->Debug)
{
print "BEGIN TRANSACTION<BR>";
}
}  
function end_transaction()  
{
if ($this->Debug)
{
print "BEGIN TRANSACTION<BR>";
}

$res = 1;
if(!@Ora_Commit($this->Link_ID))
{
Ora_CommitOn($this->Link_ID);
$this->halt("Unable to finish transaction");
$res = 0;
}
// Enable autocommit again
Ora_CommitOn($this->Link_ID);

if ($this->Debug)
{
print "END TRANSACTION : $res<BR>";
}
return $res;
}


}
?> 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
欧美.日韩.国产.一区.二区| 午夜国产视频| 欧美日韩国产在线| 美女在线视频一区| wwwwww国产| 国精品产品一区| 国产在线播放一区二区| а√天堂8资源中文在线| 亚洲国产欧美日韩在线| 欧美日韩第一| 中文字幕中文字幕精品| 国产福利一区二区在线精品| 亚洲欧美99| 日韩欧美不卡| 国产欧美日韩不卡免费| 久久99久久久欧美国产| 亚洲免费看av| 日本啊v在线| 日韩精品在线第一页| 亚洲一区二区三区精品中文字幕| 日本a级黄色| 欧美日韩高清在线播放| 欧美午夜影院在线视频| 国产福利久久| 精品调教chinesegay| 在线视频亚洲| 午夜国产视频 | 中文字幕日韩在线视频| 欧美日韩国产专区| 久久久99免费| 日韩欧美亚洲国产一区| 亚洲一卡二卡在线观看| 欧美日韩亚洲综合| 天堂在线www天堂中文在线| 日韩精品手机在线| 国产日韩精品久久久| 免费精品国产自产拍在| 欧美性生交大片免费| 国产又粗又猛又爽又黄91精品| www.久久久精品| www.中文字幕在线观看| 中文字幕99| 日韩在线视频免费观看| 91精品国产免费久久综合| 精品成a人在线观看| 日韩视频在线一区二区三区| 亚洲一级二级| 欧美日韩国产专区| 国产日韩精品电影| 91精品国产自产在线| 国产激情久久久| 日本黄色一区二区三区| 欧美天堂一区二区| 日韩视频精品在线| 精品综合久久久久| 91日韩欧美| 免费国产成人看片在线| 欧美日韩在线精品成人综合网| 国产99在线|亚洲| 91精品免费在线观看| 91最新在线| 日韩.欧美.亚洲| 国产 欧美在线| 婷婷久久综合网| 中文字幕伊人| 久久香蕉av| 国产免费久久久| 欧美一级在线免费| 欧美 日韩 国产 在线观看| 久久99久久久欧美国产| 一区二区在线视频播放| 中文字幕五月欧美| 日韩一二三四区| 精品一二三四区| www.日韩免费| 国产福利三区| 中文字幕久久精品| 欧美久久一二三四区| 欧美日韩亚洲91| 五月天久久比比资源色| 91精品国产乱码久久蜜臀| 91精品网站| 在线观看av的网站| 国产欧美日韩综合| 在线国产三级| 日韩久久不卡| 日韩在线高清| 国产乱码在线观看| 亚洲欧洲日产国码av系列天堂| 久久精品一二三| 日韩一级免费视频| 欧美日韩激情一区二区三区| 91精品视频免费在线观看| 中文字幕在线观看精品| 91精品视频免费在线观看| 欧美日韩一二| 国产99在线 | 亚洲| www.中文字幕在线| 91精品久久久久久久91蜜桃| 亚洲第一视频在线观看| 免费在线观看国产黄| 国产一级片在线播放| 欧美日韩精品久久久| 亚洲男女av一区二区| 中文亚洲欧美| 国产欧美综合在线| 国产日韩在线亚洲字幕中文| 91精品国产免费| 日本一欧美一欧美一亚洲视频| 中文在线日韩| 中文字幕亚洲区| 国产色在线视频| 99在线国产| 欧美三级网址| 欧美日韩成人一区二区| 中文字幕 亚洲视频| 伊人永久在线| 中文字幕在线亚洲| 午夜av一区二区| 黄色国产在线| 欧美日韩性视频在线| 国产日韩精品在线看| 国产九九在线| 精品久久人人做人人爽| 久久91精品久久久久久秒播| 欧美日韩999| 日韩欧美国产黄色| 日韩免费视频| 国产无套粉嫩白浆在线2022年| 欧美三级日韩三级| 欧美日韩国产一级片| 欧美日韩国产亚洲一区| 亚洲乱码在线观看| 91精品国产调教在线观看| 最近中文字幕日韩精品| 日韩视频国产视频| 欧美日韩国产中字| 午夜一区二区三区视频| 欧美日韩国产片| 亚洲最新永久观看在线| 欧美亚洲综合视频| 韩国av一区二区| 日韩在线视频网| 欧美日韩999| 亚洲男女av一区二区| 亚洲大胆人体av| 精品视频资源站| 91精品国产经典在线观看| 日韩精品视频免费播放| 中文字幕在线亚洲| 日韩午夜黄色| 欧美亚洲天堂| 欧美一卡2卡3卡4卡| 国内精品露脸在线视频播放| 日韩av不卡在线观看| 日韩.欧美.亚洲| 久久精品www| av免费观看国产| 在线资源av| 中文字幕国产欧美| 在线视频第一页| 国产一级一片免费播放| 热久久精品国产| 日韩中文字幕国产| 亚洲一区中文字幕在线观看| 日韩欧美国产高清| 国产免费久久| 久久电影国产免费久久电影| 黄色欧美日韩| 日韩.com| 中文天堂在线一区| 欧美日韩91| 在线免费播放av| www.久久久精品| 顶级网黄在线播放| 免费视频一区三区| 最近高清中文在线字幕在线观看1| 欧美在线中文字幕| 国产一级在线免费观看| 日韩在线高清| 亚洲免费视频一区| 亚洲男人在线| 久久蜜桃精品| 国产字幕在线看| 国产一二三精品| 国产成人综合精品| 精品网站999| 欧美一级久久久久久久久大| 日韩欧美国产视频| 在线欧美日韩国产| 欧美国产日韩综合| 亚洲黄色在线观看| 亚洲一区资源| 三级精品视频| 欧美亚洲专区| 午夜国产欧美理论在线播放| 91精品国产综合久久香蕉最新版| 亚洲欧美中文字幕在线观看| 国产高清不卡av| 91久久久久久久久| 国产福利一区在线观看| 国产在线欧美日韩| 91精品国产丝袜白色高跟鞋| 欧美日韩国产系列| 亚洲专区一二三| 欧美三级免费观看| 欧美不卡视频| 一区二区三区视频网站| 欧美日韩国产一二三| 欧美日韩亚洲天堂| 日韩在线视频观看正片免费网站| 亚洲欧洲在线观看av| 精品日韩在线播放| 国产一卡2卡3卡四卡网站| 黄色在线播放网站| 国产黄色在线免费观看| 不卡一二三区| 日韩欧美中文免费| 日韩精品在线免费观看| 日韩在线视频一区二区三区| 中文字幕在线导航| 国产欧美日韩91| 国产黄色片中文字幕| 日韩免费久久| 欧美国产日韩综合| 国产一级网站视频在线| 日韩一级在线免费观看| 免费国产成人看片在线| 国产高清精品在线观看| 91精品国产91久久久久久三级| 亚洲 欧美 精品| 91精品国产91久久久久久青草| 97国产视频| 亚洲国产福利| 一区二区三区免费看视频| 亚洲免费观看在线观看| 国产黄在线播放| 日韩av一区在线| 国产日韩中文在线| 视频在线一区二区| 久久久91精品国产| 蜜桃久久av一区| 欧美久久在线| 精品国产免费视频| 中文字幕第一页在线播放| 精品亚洲国内自在自线福利| 亚洲视频一二三四| 国产日韩中文在线| 亚洲欧洲日韩在线| 欧美日韩国产首页在线观看| 日韩精品视频中文字幕| 国产日产一区二区三区 | 日韩免费视频一区| 日韩一级网站| 亚洲一级网站| 日韩av一区在线| 国产乱国产乱老熟300| 日韩中文字幕在线视频播放| 欧美日韩国产一区| 亚洲日本精品视频| 日韩专区视频网站| 欧美日韩中文字幕在线视频| 欧美日韩久久久| 国产精品福利视频一区二区三区| 国产黄色在线| 欧美日韩综合视频| 欧美日韩国产亚洲一区| 精品久久电影| 91精品国产综合久久久久久| 日本一欧美一欧美一亚洲视频| 欧美日韩国产一二| 中文字幕在线播放一区| 精品久久九九| 中文在线不卡视频| 久久精品免费看| 国产成人精品综合网站| 一区二区高清在线| 国产在线拍偷自揄拍精品| 日韩欧美久久久| 国产黄色在线观看| 国产欧美 在线欧美| 日韩视频专区| 欧美中文字幕视频在线观看| 亚洲开心激情| 日韩欧美一级二级三级久久久| 影音先锋一区二区资源站| 中文字幕日韩欧美| 久久久精品日韩| 中文字幕线观看| 欧美不卡123| 中文字幕欧美日韩在线| 欧美日韩一二三四| 日韩亚洲欧美中文字幕| 欧美 中文字幕| 高清在线一区| 日韩精品视频免费| 伊人国产视频| 91精品国产综合久久精品app| 国产欧美日韩中文字幕| 国产黄色在线网站| 国产黄色在线播放| 欧美日韩国产综合视频在线观看| 国产黄在线观看| 国产婷婷一区二区| 亚洲乱码一区av黑人高潮| 中文字幕 乱码 中文乱码91| 日韩影院二区| 在线视频你懂得一区| 中文字幕 亚洲一区| 日韩亚洲不卡在线| 黄色一区二区视频| 国产在线导航| 久久精品蜜桃| 亚洲а∨精品天堂在线| 中文字幕日韩国产| 欧美高清视频一区二区三区| 日韩亚洲欧美中文字幕| 久久综合久久综合九色| 91精品视频观看| 日韩高清在线不卡| 国产偷国产偷亚洲清高网站| 婷婷精品进入| 欧美日韩精品综合在线| 天堂在线www天堂中文在线| 91精品国产自产| 国产拍揄自揄精品视频麻豆| 国产在线拍揄自揄拍| 国产99亚洲| 色欧美日韩亚洲| 日韩在线视频一区二区三区| 欧美日韩国产首页| 精品在线91| 中文字幕 亚洲一区| 日韩三级一区二区| 日韩手机在线观看视频| 欧美久久一二三四区| 精品人妻一区二区三区视频| 国产综合精品在线| 国产农村妇女精品一二区| 69av亚洲| 黄色一区二区在线观看| 日韩一级中文字幕| 99在线国产| 欧美日韩高清一区二区不卡| 日韩欧美国产高清| 日本不卡一区在线| 一级日本免费的| 欧美日韩999| 91日韩中文字幕| 精品网站999| 欧美日韩国产免费观看视频| 狠狠色噜噜狠狠狠狠97| 九九视频精品免费| 欧美日韩成人一区| 欧美激情一区二区三区在线| 日韩精品视频网站| 日韩欧美中文字幕在线视频| 色妇色综合久久夜夜| 二区视频在线观看| 黄色在线播放网站| 91日韩欧美| 92久久精品| 日韩欧美色综合| 欧美午夜精品在线| 在线精品日韩| 亚洲综合三区| 欧美一级搡bbbb搡bbbb| 日韩精品在线免费看| 日韩欧美字幕| 中文字幕在线观看网址| 国产亚洲视频中文字幕视频| 91精品视频观看| 日韩精品在线免费播放| 欧美 日韩 国产 在线| 精品乱人伦一区二区三区| 日韩中文在线视频| 日韩专区中文字幕| 日韩欧美中文| 国产福利在线播放| 精品久久久三级| 91精品久久久久久久久| 日韩精品一区二区三区视频播放| 国产最新在线| 中文字幕日韩视频| 精品国内自产拍在线视频| 国产一级在线播放| 黄色片免费在线| 日韩久久精品视频| 99精品人妻国产毛片| 中文官网资源新版中文第二页在线观看| 日韩三级精品电影久久久| 顶级网黄在线播放| 欧美日韩视频免费| 亚洲二区自拍| 91精品国产自产观看在线| 国产传媒久久久| 精品久久久视频| 国产色综合网| 欧美日韩一级片在线观看| 中文字幕在线导航|