PHP 數(shù)據(jù)庫操作

PHP支持哪些數(shù)據(jù)庫

PHP通過安裝相應的擴展來實現(xiàn)數(shù)據(jù)庫操作,現(xiàn)代應用程序的設計離不開數(shù)據(jù)庫的應用俯萌,當前主流的數(shù)據(jù)庫有MsSQL第焰,MySQL买优,Sybase,Db2挺举,Oracle杀赢,PostgreSQL,Access等湘纵,這些數(shù)據(jù)庫PHP都能夠安裝擴展來支持脂崔,一般情況下常說的LAMP架構(gòu)指的是:Linux、Apache梧喷、Mysql砌左、PHP,因此Mysql數(shù)據(jù)庫在PHP中的應用非常廣泛

<?php
if (function_exists('mysql_connect')) {
    echo 'Mysql擴展已經(jīng)安裝';
}

數(shù)據(jù)庫擴展

PHP中一個數(shù)據(jù)庫可能有一個或者多個擴展伤柄,其中既有官方的绊困,也有第三方提供的。像Mysql常用的擴展有原生的mysql庫适刀,也可以使用增強版的mysqli擴展秤朗,還可以使用PDO進行連接與操作。

不同的擴展提供基本相近的操作方法笔喉,不同的是可能具備一些新特性取视,以及操作性能可能會有所不同。

  • mysql擴展進行數(shù)據(jù)庫連接的方法:
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password');
  • mysqli擴展:
$link = mysqli_connect('mysql_host', 'mysql_user', 'mysql_password');
  • PDO擴展:
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
$dbh = new PDO($dsn, $user, $password);

示例

<?php
$link = mysql_connect('127.0.0.1', 'code1', '') or die('數(shù)據(jù)庫連接失敗');
mysql_select_db('code1');
mysql_query("set names 'utf8'");
$result = mysql_query('select * from user limit 1');
$row = mysql_fetch_assoc($result);
print_r($row);

連接數(shù)據(jù)庫

PHP要對數(shù)據(jù)庫進行操作常挚,首先要做的是與數(shù)據(jù)庫建立連接作谭,通常我們使用mysql_connect函數(shù)進行數(shù)據(jù)庫連接,該函數(shù)需要指定數(shù)據(jù)庫的地址奄毡,用戶名及密碼折欠。

$host = 'localhost';
$user = 'code1';
$pass = '';
$link = mysql_connect($host, $user, $pass);

PHP連接數(shù)據(jù)庫的方式類似于直接在命令行下通過進行連接,類似:mysql -hlocalhost -ucode1 -p吼过,當連接成功以后锐秦,我們需要選擇一個操作的數(shù)據(jù)庫,通過mysql_select_db函數(shù)來選擇數(shù)據(jù)庫盗忱。

mysql_select_db('code1');

通常我們會先設置一下當前連接使用的字符編碼酱床,一般的我們會使用utf8編碼。

mysql_query("set names 'utf8'");

通過上面的步驟趟佃,我們就與數(shù)據(jù)庫建立了連接扇谣,可以進行數(shù)據(jù)操作了昧捷。

<?php
$host = '127.0.0.1';
$user = 'code1';
$pass = '';
//在這里編寫數(shù)據(jù)庫連接代碼
mysql_connect($host,$user,$pass);
mysql_select_db('code1');
mysql_query("set names 'utf8'");

執(zhí)行MySQL查詢

在數(shù)據(jù)庫建立連接以后就可以進行查詢,采用mysql_query加sql語句的形式向數(shù)據(jù)庫發(fā)送查詢指令罐寨。

$res = mysql_query('select * from user limit 1');

對于查詢類的語句會返回一個資源句柄(resource)靡挥,可以通過該資源獲取查詢結(jié)果集中的數(shù)據(jù)。

$row = mysql_fetch_array($res);
var_dump($row);

默認的衩茸,PHP使用最近的數(shù)據(jù)庫連接執(zhí)行查詢芹血,但如果存在多個連接的情況,則可以通過參數(shù)指令從那個連接中進行查詢楞慈。

$link1 = mysql_connect('127.0.0.1', 'code1', '');
$link2 = mysql_connect('127.0.0.1', 'code1', '', true); //開啟一個新的連接
$res = mysql_query('select * from user limit 1', $link1); //從第一個連接中查詢數(shù)據(jù)

插入新數(shù)據(jù)到MySQL中

當我們了解了如何使用mysql_query進行數(shù)據(jù)查詢以后幔烛,那么類似的,插入數(shù)據(jù)其實也是通過執(zhí)行一個sql語句來實現(xiàn)囊蓝,例如:

$sql = "insert into user(name, age, class) values('李四', 18, '高三一班')";
mysql_query($sql); //執(zhí)行插入語句

通常數(shù)據(jù)都是存儲在變量或者數(shù)組中饿悬,因此sql語句需要先進行字符串拼接得到。

$name = '李四';
$age = 18;
$class = '高三一班';
$sql = "insert into user(name, age, class) values('$name', '$age', '$class')";
mysql_query($sql); //執(zhí)行插入語句

在mysql中聚霜,執(zhí)行插入語句以后狡恬,可以得到自增的主鍵id,通過PHP的mysql_insert_id函數(shù)可以獲取該id。

$uid = mysql_insert_id();

這個id的作用非常大蝎宇,通车芫ⅲ可以用來判斷是否插入成功,或者作為關聯(lián)ID進行其他的數(shù)據(jù)操作姥芥。

完整示例:

<?php
//連接數(shù)據(jù)庫
mysql_connect('127.0.0.1', 'code1', '');
mysql_select_db('code1');
mysql_query("set names 'utf8'");
//已知的數(shù)據(jù)變量有
$name = '李四';
$age = 18;
$class = '高三一班';
//在這里進行數(shù)據(jù)查詢
$sql = "insert into user(name, age, class) values('$name', '$age', '$class')";
mysql_query($sql); //執(zhí)行插入語句
$uid = mysql_insert_id();
echo $uid;

取得數(shù)據(jù)查詢結(jié)果

PHP操作數(shù)據(jù)庫跟MySql客戶端上操作極為相似兔乞,先進行連接,然后執(zhí)行sql語句凉唐,再然后獲取我們想要的結(jié)果集庸追。

PHP有多個函數(shù)可以獲取數(shù)據(jù)集中的一行數(shù)據(jù),最常用的是mysql_fetch_array台囱,可以通過設定參數(shù)來更改行數(shù)據(jù)的下標淡溯,默認的會包含數(shù)字索引的下標以及字段名的關聯(lián)索引下標。

$sql = "select * from user limit 1";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);

可以通過設定參數(shù)MYSQL_NUM只獲取數(shù)字索引數(shù)組簿训,等同于mysql_fetch_row函數(shù)咱娶,如果設定參數(shù)為MYSQL_ASSOC則只獲取關聯(lián)索引數(shù)組,等同于mysql_fetch_assoc函數(shù)强品。

$row = mysql_fetch_row($result);
$row = mysql_fetch_array($result, MYSQL_NUM); 
// ------ 這兩個方法獲取的數(shù)據(jù)是一樣的
$row = mysql_fetch_assoc($result);
$row = mysql_fetch_array($result, MYSQL_ASSOC);

如果要獲取數(shù)據(jù)集中的所有數(shù)據(jù)豺总,我們通過循環(huán)來遍歷整個結(jié)果集。

$data = array();
while ($row = mysql_fetch_array($result)) {
    $data[] = $row;
}

查詢分頁數(shù)據(jù)

在實際應用中择懂,我們并不希望一次性獲取數(shù)據(jù)表中的所有數(shù)據(jù),那樣性能會非常的低另玖,因此會使用翻頁功能困曙,每頁僅顯示10條或者20條數(shù)據(jù)表伦。

通過mysql的limit可以很容易的實現(xiàn)分頁,limit m,n表示從m行后取n行數(shù)據(jù)慷丽,在PHP中我們需要構(gòu)造m與n來實現(xiàn)獲取某一頁的所有數(shù)據(jù)蹦哼。

假定當前頁為$page,每頁顯示$pagesize條數(shù)據(jù)要糊,那么offset為當前頁前面所有的數(shù)據(jù)纲熏,既$offset = ($page-1) * $pagesize,在知道了翻頁原理以后锄俄,那么我們很容易通過構(gòu)造SQL語句在PHP中實現(xiàn)數(shù)據(jù)翻頁局劲。

<?php
//連接數(shù)據(jù)庫
mysql_connect('127.0.0.1', 'code1', '');
mysql_select_db('code1');
mysql_query("set names 'utf8'");
//預設翻頁參數(shù)
$page = 2;
$pagesize = 2;
//在這里構(gòu)建分頁查詢
$offset = ($page - 1) * $pagesize;
$sql = "select * from user limit $offset, $pagesize";
//獲取翻頁數(shù)據(jù)
$result = mysql_query($sql);
$data = array();
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    $data[] = $row;
}
echo '<pre>';
print_r($data);
echo '</pre>';

更新與刪除數(shù)據(jù)

數(shù)據(jù)的更新與刪除相對比較簡單,只需要構(gòu)建好相應的sql語句奶赠,然后調(diào)用mysql_query執(zhí)行就能完成相應的更新與刪除操作鱼填。

$sql = "update user set name = '曹操' where id=2 limit 1";
if (mysql_query($sql)) {
    echo '更新成功';
}

同樣的刪除可以使用類似以下的代碼:

$sql = "delete from user where id=2 limit 1";
if (mysql_query($sql)) {
    echo '刪除成功';
}

對于刪除與更新操作,可以通過mysql_affected_rows函數(shù)來獲取更新過的數(shù)據(jù)行數(shù)毅戈,如果數(shù)據(jù)沒有變化苹丸,則結(jié)果為0。

$sql = "update user set name = '曹操' where id=2 limit 1";
if (mysql_query($sql)) {
    echo mysql_affected_rows();
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末苇经,一起剝皮案震驚了整個濱河市赘理,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扇单,老刑警劉巖商模,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異令花,居然都是意外死亡阻桅,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門兼都,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嫂沉,“玉大人,你說我怎么就攤上這事扮碧√苏拢” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵慎王,是天一觀的道長蚓土。 經(jīng)常有香客問我,道長赖淤,這世上最難降的妖魔是什么蜀漆? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮咱旱,結(jié)果婚禮上确丢,老公的妹妹穿的比我還像新娘绷耍。我一直安慰自己,他們只是感情好鲜侥,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布褂始。 她就那樣靜靜地躺著,像睡著了一般描函。 火紅的嫁衣襯著肌膚如雪崎苗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天舀寓,我揣著相機與錄音胆数,去河邊找鬼。 笑死基公,一個胖子當著我的面吹牛幅慌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播轰豆,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼胰伍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了酸休?” 一聲冷哼從身側(cè)響起骂租,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎斑司,沒想到半個月后渗饮,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡宿刮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年互站,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片僵缺。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡胡桃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出磕潮,到底是詐尸還是另有隱情翠胰,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布自脯,位于F島的核電站之景,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏膏潮。R本人自食惡果不足惜锻狗,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧轻纪,春花似錦脚囊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽讲岁。三九已至我擂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缓艳,已是汗流浹背校摩。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留阶淘,地道東北人衙吩。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像溪窒,于是被迫代替她去往敵國和親坤塞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容

  • PHP支持哪些數(shù)據(jù)庫 PHP通過安裝相應的擴展來實現(xiàn)數(shù)據(jù)庫操作澈蚌,現(xiàn)代應用程序的設計離不開數(shù)據(jù)庫的應用摹芙,當前主流的數(shù)...
    雪碧spirit閱讀 910評論 1 5
  • 一、操作數(shù)據(jù)庫的步驟 我們對數(shù)據(jù)庫的操作主要分為五步:連接數(shù)據(jù)庫宛瞄、選擇數(shù)據(jù)庫浮禾、設置編碼方式、操作數(shù)據(jù)庫份汗、關閉數(shù)據(jù)庫...
    XZ陽光小熊閱讀 369評論 0 0
  • 需要原文的可以留下郵箱我給你發(fā)盈电,這里的文章少了很多圖,懶得網(wǎng)上粘啦 1數(shù)據(jù)庫基礎 1.1數(shù)據(jù)庫定義 1)數(shù)據(jù)庫(D...
    極簡純粹_閱讀 7,441評論 0 46
  • 1.MySQL是一個關系型數(shù)據(jù)庫管理系統(tǒng)杯活,由瑞典MySQL AB 公司開發(fā)匆帚,目前屬于 Oracle 旗下產(chǎn)品。My...
    黃花菜已涼閱讀 4,572評論 3 60
  • 1.正念是對當下的真實保持覺知轩猩,活在當下卷扮,享受當下,對當下保持清醒覺知均践。而我們總是會回憶過去思考未來晤锹,忙來忙去總覺...
    夏蘇的花園閱讀 145評論 0 0