国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
PEAR中Database(DB)使用介紹
DSN連接方式
DB目前支持的連接方式如下
最完整的格式:
phptype(dbsyntax)://username:password@protocol+hostspec/database?option=value
別外還有一些縮寫的格式:
phptype://username:password@protocol+hostspec:110//usr/db_file.db
phptype://username:password@hostspec/database
phptype://username:password@hostspec
phptype://username@hostspec
phptype://hostspec/database
phptype://hostspec
phptype:///database
phptype:///database?option=value&anotheroption=anothervalue
phptype(dbsyntax)
phptype
其中phptype表示數(shù)據(jù)庫類型,可用的選項有:
dbase  -> dBase
fbsql  -> FrontBase
ibase  -> InterBase
ifx    -> Informix
msql   -> Mini SQL
mssql  -> Microsoft SQL Server
mysql  -> MySQL (for MySQL <= 4.0)
mysqli -> MySQL (for MySQL >= 4.1) (since DB 1.6.3)
oci8   -> Oracle 7/8/9
odbc   -> ODBC (Open Database Connectivity)
pgsql  -> PostgreSQL
sqlite -> SQLite
sybase -> Sybase
以下是一些常用的連接例子:
l        連到一非標(biāo)準(zhǔn)端口的數(shù)據(jù)庫
pgsql://user:pass@tcp(localhost:5555)/pear
l        通過SOCKET方式連到數(shù)據(jù)庫
mysql://user@unix(/path/to/socket)/pear
l        在UNIX機上,連接SQLite數(shù)據(jù)庫
sqlite:////full/unix/path/to/file.db?mode=0666
l        在Windows機上,連接SQLite數(shù)據(jù)庫
sqlite:///c:/full/windows/path/to/file.db?mode=0666
l        使用SSL,連接到MySQLi
mysqli://user:pass@localhost/pear?key=client-key.pem&cert=client-cert.pem
l        通過ODBC連接到一個ACCESS數(shù)據(jù)庫
odbc(access)://username:password@/datasourcename
DB連接實例
<?php
require_once ‘DB.php‘;
$dsn = ‘mysql://username:password@localhost/dbname‘;
/**
也可以用以下的方式
$dsn = array(
‘phptype‘  => ‘pgsql‘,
‘username‘ => ‘someuser‘,
‘password‘ => ‘a(chǎn)passwd‘,
‘hostspec‘ => ‘localhost‘,
‘database‘ => ‘thedb‘,
);
*/
//$options是可選的
$options = array(
‘debug‘       => 2,
‘portability‘ => DB_PORTABILITY_ALL,
);
$db =& DB::connect($dsn, $options);
if (DB::isError($db)) {
die($db->getMessage());
}
//設(shè)置數(shù)據(jù)庫的默認(rèn)查詢方式
$db->setFetchMode(DB_FETCHMODE_ASSOC);
//執(zhí)行一個普通的查詢語句
$res =& $db->query(‘SELECT * FROM products‘);
//取得一個SQL查詢的結(jié)果集行,列數(shù)
printf("共有%d行,%d列數(shù)據(jù)", $res->numRows(), $res->numCols());
//當(dāng)前表的結(jié)構(gòu)信息
echo ("<pre>");
print_r($db->tableInfo($res));
echo ("</pre>");
//執(zhí)行一個帶參數(shù)的查詢
$sql  = ‘select  *  from products where products_id < ?‘;
$data = 50;
$res =& $db->query($sql, $data);
//執(zhí)行含有多個參數(shù)的查詢
$sql  = ‘select * from products where products_volt < ? and products_capacity > ?‘;
$data = array(10, 4000);
$res =& $db->query($sql, $data);
// 記得永遠(yuǎn)要檢查執(zhí)行的動作是否有錯誤
if (DB::isError($res)) {
die($res->getMessage());
}
//按默認(rèn)方式DB_FETCHMODE_ORDERED,循環(huán)顯示,輸出結(jié)果,這種方式下,只能以序號的方式來訪問數(shù)據(jù)字段
while ($row =& $res->fetchRow()) {
echo $row[0] . "<br />\n";
}
//按DB_FETCHMODE_ASSOC方式,循環(huán)顯示,輸出結(jié)果,這種方式下,以字段名稱的方式來訪問數(shù)據(jù)字段
while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
echo $row[‘id‘] . "\n";
}
//獲取指定范圍的行數(shù)據(jù)
$from = 50;
$resPage = 10;
$to = $from + $resPage;
foreach (range($from, $to) as $rowNum) {
if (!$row =& $res->fetchRow($fetchmode, $rowNum)) {
break;
}
echo $row[0] . "\n";
}
//釋放資源
$res->free();
//通過getAll(),可以獲取整個查詢的結(jié)果集
$result = $db->getAll("select * from tablename");
//得到UPDATE/INSERT/DELETE等語句,所影響的行數(shù)
$db->query(‘DELETE * FROM clients‘);
echo ‘I have deleted ‘ . $db->affectedRows() . ‘ clients‘;
//close database connection
$db->disconnect();
?>
Prepare/Execute使用詳解
當(dāng)要多次執(zhí)行一組查詢,只是有些參數(shù)不同時
INSERT INTO tle_name(col1, col2) VALUES(‘val1’, val2);
INSERT INTO tle_name(col1, col2) VALUES(‘val3’, val4);
……
或者你的語句要符合多個不同語法的數(shù)據(jù)庫時db1: INSERT INTO tbl_name (col1, col2) VALUES (expr1, expr2)
db2: INSERT INTO tbl_name SET col1=expr1, col2=expr2
可以使用prepare/execute語句,以提供更好的兼容性和可擴(kuò)展性能
使用prepare/execute語句,要分2個步驟
1. 用prepare()來準(zhǔn)備SQL語句:
假設(shè)你有一個類似于這樣的SQL語句
SELECT surname, name, age
FROM person
WHERE name = ‘name_to_find‘ AND age < age_limit
使用prepare()時,你可以這樣來寫:
SELECT surname, name, age
FROM person
WHERE name = ? AND age < ?
其中的類似于JSP或其它語言中的參數(shù)變量,類似的還有:
(推薦)
標(biāo)準(zhǔn)的用來代替數(shù)字(或字符)型變量的參數(shù),它可以自動地eacape或根據(jù)當(dāng)前的DBMS系統(tǒng)的需要,來quoted數(shù)據(jù)
!
stands for a scalar value and will inserted into the statement "as is"
&
請求一個已經(jīng)存在的文件,這個文件的內(nèi)容將用于替換&,常用于保存二進(jìn)制文件或圖象內(nèi)容到數(shù)據(jù)庫中
2.execute() 把變量傳遞給prepare的SQL語句,然后執(zhí)行它,execute()需要2個參數(shù),一個是prepare()調(diào)用時指定的變量,另一個就是要傳遞給的變量(可以用數(shù)組)
一個簡單的例子
<?php
// 假設(shè)你已經(jīng)有一個有效的數(shù)據(jù)庫連接變量$db …
$sth = $db->prepare(‘INSERT INTO numbers (number) VALUES (?)‘);
$db->execute($sth, 1);
$db->execute($sth, 8);
?>
一個保存圖象到數(shù)據(jù)庫的例子
假設(shè)數(shù)據(jù)庫中有一個test表,它的結(jié)構(gòu)如下:
CREATE TABLE `test` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(100) default NULL,
`image` blob,
`description` text,
`note` text,
PRIMARY KEY  (`id`)
) TYPE=MyISAM
insert.php
<?php
require_once ‘DB.php‘;
$dsn = ‘mysql://username:password@localhost/test‘;
$options = array(
‘debug‘       => 2,
‘portability‘ => DB_PORTABILITY_ALL,
);
$db =& DB::connect($dsn, $options);
if (DB::isError($db)) {
die($db->getMessage());
}
$db->setFetchMode(DB_FETCHMODE_ASSOC);
$sth = $db->prepare("INSERT test(name, image) VALUES(?, &)");
$db->execute($sth, array(‘jxyuhua‘, ‘D://websamples//PEAR//Database//welcome.jpg‘));
if (DB :: isError($db)) {
die($db->getMessage());
}
//$res->free();
$db->disconnect();
?>
存入數(shù)據(jù)庫之后(注意內(nèi)容大小的限制),你就可以再將內(nèi)容取出來顯示了
顯示的例子
image.php
<?php
require_once ‘DB.php‘;
$dsn = ‘mysql://username:password@localhost/test‘;
$options = array(
‘debug‘       => 2,
‘portability‘ => DB_PORTABILITY_ALL,
);
$db =& DB::connect($dsn, $options);
if (DB::isError($db)) {
die($db->getMessage());
}
$db->setFetchMode(DB_FETCHMODE_ASSOC);
$res = $db->query("select image from test where name = ? order by name", $_REQUEST[‘name‘]);
if (DB :: isError($res)) {
die($res->getMessage());
}
while ($row = $res->fetchRow()) {
$data = $row[‘image‘];
}
header("Content-type: image/jpeg"); //如果是其它的圖象格式,如GIF,要做相應(yīng)的更改image/gif
echo ($data);
$res->free();
$db->disconnect();
?>
DB允許你一次進(jìn)行一組數(shù)據(jù)庫操作,例如,你要一次性地插入/更新一批數(shù)據(jù),
<?php
//假設(shè)數(shù)據(jù)庫已經(jīng)連接
$alldata = array(array(1, ‘one‘, ‘en‘),
array(2, ‘two‘, ‘to‘),
array(3, ‘three‘, ‘tre‘),
array(4, ‘four‘, ‘fire‘));
$sth = $db->prepare(‘INSERT INTO numbers VALUES (?, ?, ?)‘);
foreach ($alldata as $row) {
$db->execute($sth, $row);
}
?>
以上語句將執(zhí)行等效于下面的SQL語句功能:
INSERT INTO numbers VALUES (‘1‘, ‘one‘, ‘en‘)
INSERT INTO numbers VALUES (‘2‘, ‘two‘, ‘to‘)
INSERT INTO numbers VALUES (‘3‘, ‘three‘, ‘tre‘)
INSERT INTO numbers VALUES (‘4‘, ‘four‘, ‘fire‘)
如果你想更省事一點,可以使用executeMultiple()
<?php
//假設(shè)數(shù)據(jù)庫已經(jīng)連接
$alldata = array(array(1, ‘one‘, ‘en‘),
array(2, ‘two‘, ‘to‘),
array(3, ‘three‘, ‘tre‘),
array(4, ‘four‘, ‘fire‘));
$sth = $db->prepare(‘INSERT INTO numbers VALUES (?, ?, ?)‘);
$db->executeMultiple($sth, $alldata);
?>
有沒有這樣的經(jīng)歷,當(dāng)你在一個表中加了(或刪除)一些字段之后,你原來的SQL語句就必須要重新寫過,這樣是不是很煩人?
例如,你有一個user表,它有3個字段(id, name, country),你以前的INSERT/UPDATE語句:
INSERT INTO user (id, name, country) VALUES (?, ?, ?)
UPDATE user SET id=?, name=?, country=? WHERE ...
當(dāng)你增加了一個字段(假設(shè)是birthday)之后,你就必須重新你以前的INSERT/UPDATE語句,而這很有可能會導(dǎo)至BUG的出現(xiàn)(假設(shè)你漏改了某些地方).
現(xiàn)在讓我們來看看怎樣用autoPrepare()/autoExecute()來解決這個問題
1. autoPrepare()
用autoPrepare(),你不必列出INSERT/UPDATE的詳細(xì)語句,而只要指定它的基本信息
resource autoPrepare (string $table, array $table_fields, integer $mode = DB_AUTOQUERY_INSERT [, string $where = FALSE])
$table               表名
$table_fields        要進(jìn)行操作的字段名列表(數(shù)組類型)
$mode                (DB_AUTOQUERY_INSERT || DB_AUTOQUERY_UPDATE)
$where               WHERE語句,用于過濾數(shù)據(jù)
<?php
// 假設(shè)你已經(jīng)有一個有效的數(shù)據(jù)庫連接變量$db …
$table_name   = ‘user‘;
$table_fields = array(‘id‘, ‘name‘, ‘country‘);
$sth = $db->autoPrepare($table_name, $table_fields,
DB_AUTOQUERY_INSERT);
if (DB::isError($sth)) {
die($sth->getMessage());
}
$table_values = array(1, ‘Fabien‘, ‘France‘);
$res =& $db->execute($sth, $table_values);
if (DB::isError($res)) {
die($res->getMessage());
}
?>
在這個例子中,autoPrepare()會把它自動翻譯成
INSERT INTO user (id, name, country) VALUES (?, ?, ?)
然后再自動調(diào)用prepare()
注意:如果你使用DB_AUTOQUERY_UPDATE, 記得指定$where條件,否則將更新所有的數(shù)據(jù).
2.autoExecute()
autoExecute()是autoPrepare()和execute()的混合體,它可以方便地執(zhí)行INSERT/UPDATE
DB_Result autoExecute (string $table, array $fields_values [, integer $mode = DB_AUTOQUERY_INSERT [, string $where = FALSE]])
$table               表名
$table_fields        要進(jìn)行操作的字段名列表(數(shù)組類型)
$mode                (DB_AUTOQUERY_INSERT || DB_AUTOQUERY_UPDATE)
$where               WHERE語句,用于過濾數(shù)據(jù)
<?php
// 假設(shè)你已經(jīng)有一個有效的數(shù)據(jù)庫連接變量$db …
$table_name = ‘user‘;
$fields_values = array(
‘id‘      => 1,
‘name‘    => ‘Fabien‘,
‘country‘ => ‘France‘
);
$res = $db->autoExecute($table_name, $fields_values,
DB_AUTOQUERY_INSERT);
if (DB::isError($res)) {
die($res->getMessage());
}
?>
它執(zhí)行等效于下面的語句
INSERT INTO user (id, name, country)  VALUES (1, ‘Fabien‘, ‘France‘)
是不是很方便簡直帥呆了!
注意:如果你使用DB_AUTOQUERY_UPDATE, 記得指定$where條件,否則將更新所有的數(shù)據(jù).
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
ecshop 通過UCenter 與 Discuz! x2整合時 ECSHOP接口的同步登出B
sqlite3的sql語句用法總結(jié)與SQLite生成.db-journal文件問題【原創(chuàng)】
【Laravel系列4.1】連接數(shù)據(jù)庫與原生查詢
2.關(guān)于mongodb的基礎(chǔ)操作
php操作mysql的類
操作別的數(shù)據(jù)庫中的表
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服