电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

PHP擴展小試牛刀系列之數據庫擴展mysqli詳細使用教程

瀏覽:2日期:2022-09-13 10:10:09

PHP擴展小試牛刀系列之數據庫擴展mysqli詳細使用教程

mysqli提供了面向對象和面向過程兩種方式來與數據庫交互,分別看一下這兩種方式。

1、面向對象

在面向對象的方式中,mysqli被封裝成一個類,它的構造方法如下:

__construct ([ string $host [, string $username [, string $passwd [, string $dbname[, int $port [, string $socket ]]]]]] )

在上述語法中涉及到的參數說明如下。

host:連接的服務器地址。username:連接數據庫的用戶名,默認值是服務器進程所有者的用戶名。passwd:連接數據庫的密碼,默認值為空。dbname:連接的數據庫名稱。port:TCP端口號。socket:UNIX域socket。

要建立與MySQL的連接可以通過其構造方法實例化mysqli類,例如下面的代碼:

<?php $db_host='localhost'; //連接的服務器地址 $db_user='root'; //連接數據庫的用戶名 $db_psw='root'; //連接數據庫的密碼 $db_name='sunyang'; //連接的數據庫名稱 $mysqli=new mysqli($db_host,$db_user,$db_psw,$db_name);?>

mysqli還提供了一個連接MySQL的成員方法connect()。當實例化構造方法為空的mysqli類時,用mysqli對象調用connect()方法同樣可連接MySQL,例如,下面的代碼:

<?php $db_host='localhost'; //連接的服務器地址 $db_user='root'; //連接數據庫的用戶名 $db_psw='root'; //連接數據庫的密碼 $db_name='sunyang'; //連接的數據庫名稱 $mysqli=new mysqli(); $mysqli->connect($db_host,$db_user,$db_psw,$db_name);?>

關閉與MySQL服務器的連接通過mysqli對象調用close()方法即可,例如:

$mysqli->close();2、面向過程

在面向過程的方式中,mysqli擴展提供了函數mysqli_connect()與MySQL建立連接,該函數的語法格式如下:

mysqli mysqli_connect ([ string $host [, string $username [, string $passwd[, string $dbname [, int $port [, string $socket ]]]]]] )

mysqli_connect()函數的用法與mysql擴展中的mysql_connect()函數用法十分相似,下面是mysqli_connect()函數的用法示例:

<?php $connection = mysqli_connect('localhost','root','root','sunyang'); if ( $connection ) {echo '數據庫連接成功'; }else {echo '數據庫連接失敗'; }?>

關閉與MySQL服務器的連接使用mysqli_close()函數,例如:

mysqli_close();3、使用mysqli存取數據

使用mysqli存取數據也包括面向對象和面向過程兩種方式,在本節我們只討論如何使用面向對象的方式來與MySQL交互,關于mysqli擴展中使用面向過程方式這里就不再詳細介紹了,有興趣的讀者可參考官方文檔來獲取相關的資料。

在mysqli中,執行查詢使用query()方法,該方法的語法格式如下:

mixed query ( string $query [, int $resultmode ] )

在上述語法中涉及到的參數說明如下:

query:向服務器發送的SQL語句。resultmode:該參數接受兩個值,一個是MYSQLI_STORE_RESULT,表示結果作為緩沖集合返回;另一個是MYSQLI_USE_RESULT,表示結果作為非緩沖集合返回。

下面是使用query()方法執行查詢的例子:

<?php $mysqli=new mysqli('localhost','root','root','sunyang'); //實例化mysqli $query='select * from employee'; $result=$mysqli->query($query); if ($result) {if($result->num_rows>0){ //判斷結果集中行的數目是否大于0 while($row =$result->fetch_array() ){ //循環輸出結果集中的記錄echo ($row[0]).'<br>';echo ($row[1]).'<br>';echo ($row[2]).'<br>';echo ($row[3]).'<br>';echo '<hr>'; }} }else {echo '查詢失敗'; } $result->free(); $mysqli->close();?>

在上面代碼中,num_rows為結果集的一個屬性,返回結果集中行的數目。方法fetch_array()將結果集中的記錄放入一個數組中并將其返回。最后使用free()方法將結果集中的內存釋放,使用close()方法將數據庫連接關閉。

對于刪除記錄(delete)、保存記錄(insert)和修改記錄(update)的操作,也是使用query()方法來執行的,下面是刪除記錄的例子:

<?php $mysqli=new mysqli('localhost','root','root','sunyang'); //實例化mysqli $query='delete from employee where emp_id=2'; $result=$mysqli->query($query); if ($result){echo '刪除操作執行成功'; }else {echo '刪除操作執行失敗'; } $mysqli->close();?>

保存記錄(insert)、修改記錄(update)的操作與刪除記錄(delete)的操作類似,將SQL語句進行相應的修改即可。

4、預處理語句

使用預處理語句可提高重復使用語句的性能,在PHP中,使用prepare()方法來進行預處理語句查詢,使用execute()方法來執行預準備語句。PHP有兩種預處理語句:一種是綁定結果,另一種是綁定參數。

(1)綁定結果

所謂綁定結果就是把PHP腳本中的自定義變量綁定到結果集中的相應字段上,這些變量就代表著所查詢的記錄,綁定結果的示例代碼如下:

<?php $mysqli=new mysqli('localhost','root','root','sunyang'); //實例化mysqli $query='select * from employee'; $result=$mysqli->prepare($query); //進行預準備語句查詢 $result->execute(); //執行預準備語句 $result->bind_result($id,$number,$name,$age); //綁定結果 while ($result->fetch()) {echo $id;echo $number;echo $name;echo $age; } $result->close(); //關閉預準備語句 $mysqli->close(); //關閉連接?>

在綁定結果的時候,腳本中的變量要與結果集中的字段一一對應,綁定完以后,通過fetch()方法將綁定在結果集中的變量一一取出來,最后將預處理和數據庫連接分別關閉。

(2)綁定參數

所謂綁定參數就是把PHP腳本中的自定義變量綁定到SQL語句中的參數(參數使用 “?”代替)上,綁定參數使用bind_param()方法,該方法的語法格式如下:

bool bind_param ( string $types , mixed &$var1 [, mixed &$... ] )

在上述語法中涉及到的參數說明如下。

types:綁定的變量的數據類型,它接受的字符種類包括4個,如下表所示(參數types接受的字符的種類和綁定的變量需要一一對應)。字符種類代表的數據類型IintegerDdoubleSstringBblobvar1:綁定的變量,其數量必須要與SQL語句中的參數數量保持一致。

綁定參數的示例代碼如下:

<?php $mysqli=new mysqli('localhost','root','root','sunyang'); //實例化mysqli $query='insert into employee (emp_number,emp_name,emp_age) values (?,?,?)'; $result=$mysqli->prepare($query); $result->bind_param('ssi',$number,$name,$age); //綁定參數 $number=’sy0807’; $name=’employee7’; $age=20; $result->execute(); //執行預準備語句 $result->close(); $mysqli->close();?>

在一個腳本中還可以同時綁定參數和綁定結果,示例代碼如下:

<?php $mysqli=new mysqli('localhost','root','root','sunyang'); //實例化mysqli $query='select * from employee where emp_id < ?'; $result=$mysqli->prepare($query); $result->bind_param('i',$emp_id); //綁定參數 $emp_id=4; $result->execute(); $result->bind_result($id,$number,$name,$age); //綁定結果 while ($result->fetch()) {echo $id.'<br>';echo $number.'<br>';echo $name.'<br>';echo $age.'<br>'; } $result->close(); $mysqli->close();?>5、多個查詢

mysqli擴展提供了能連續執行多個查詢的multi_query()方法,該方法的語法格式如下:

bool mysqli_multi_query ( mysqli $link , string $query )

在執行多個查詢時,除了最后一個查詢語句,每個查詢語句之間要用“;”分開。執行多個查詢的示例代碼如下:

$mysqli=new mysqli('localhost','root','root','sunyang'); //實例化mysqli $query = 'select emp_name from employee ;'; $query .= 'select dep_name from depment '; if ($mysqli->multi_query($query)) { //執行多個查詢do { if ($result = $mysqli->store_result()) {while ($row = $result->fetch_row()) { echo $row[0]; echo '<br>';}$result->close(); } if ($mysqli->more_results()) {echo ('-----------------<br>'); //連個查詢之間的分割線 }} while ($mysqli->next_result()); } $mysqli->close();//關閉連接?>

在上述代碼中,store_result()方法用于獲得一個緩沖結果集; fetch_row()方法的作用類似于fetch_array()方法;more_results()方法用于從一個多查詢中檢查是否還有更多的查詢結果;next_result()方法用于從一個多查詢中準備下一個查詢結果。

6、事務操作

首先只有數據庫中表的類型為InnoDB時,才支持事務提交,建議使用InnoDB,更建議使用mysqli擴展庫了,不僅因為mysqli支持多條sql查詢,更是因為它的速度、性能、安全更可靠,而且完全面向對象,當然也可以是面向過程操作。

看下面mysqli對事務操作的php代碼:

<?php header('Content:text/html;charset=utf-8'); /*mysqli面向過程操作www.phpddt.com*/ $mysqli = new mysqli(’localhost’,’root’,’’,’test’); $mysqli->query('set names utf8'); if ($mysqli->connect_error){die('連接錯誤:'.$mysqli->connect_error); } //將事務提交設為false $mysqli->autocommit(false); $sql = 'insert into `user` values(null,’小紅’,md5(123),’321321’)'; $sql2 = 'insert into `user` values(null,’小王’,md5(321),’dasf’)'; //執行操作,返回的是bool值 $query = $mysqli->query($sql); $query2 = $mysqli->query($sql2); if ($query && $query2){$mysqli->commit();echo '操作成功'; }else{echo '操作失敗'.$mysqli->error;$mysqli->rollback(); } $mysqli->autocommit(true); $mysqli->close();?>

標簽: PHP
相關文章:
主站蜘蛛池模板: 智能门锁电机_智能门锁离合器_智能门锁电机厂家-温州劲力智能科技有限公司 | 手持式线材张力计-套帽式风量罩-深圳市欧亚精密仪器有限公司 | 广东护栏厂家-广州护栏网厂家-广东省安麦斯交通设施有限公司 | LED灯杆屏_LED广告机_户外LED广告机_智慧灯杆_智慧路灯-太龙智显科技(深圳)有限公司 | 山东石英砂过滤器,除氟过滤器「价格低」-淄博胜达水处理 | 焊接烟尘净化器__焊烟除尘设备_打磨工作台_喷漆废气治理设备 -催化燃烧设备 _天津路博蓝天环保科技有限公司 | 培训一点通 - 合肥驾校 - 合肥新亚驾校 - 合肥八一驾校 | 冻干机(冷冻干燥机)_小型|实验型|食品真空冷冻干燥机-松源 | 国际船舶网 - 船厂、船舶、造船、船舶设备、航运及海洋工程等相关行业综合信息平台 | 生物颗粒燃烧机-生物质燃烧机-热风炉-生物颗粒蒸汽发生器-丽水市久凯能源设备有限公司 | 成都亚克力制品,PVC板,双色板雕刻加工,亚克力门牌,亚克力标牌,水晶字雕刻制作-零贰捌广告 | 留学生辅导网-在线课程论文辅导-留学生挂科申诉机构 | POS机办理_个人POS机免费领取 - 银联POS机申请首页 | 上海冠顶工业设备有限公司-隧道炉,烘箱,UV固化机,涂装设备,高温炉,工业机器人生产厂家 | 仿古瓦,仿古金属瓦,铝瓦,铜瓦,铝合金瓦-西安东申景观艺术工程有限公司 | 工业CT-无锡璟能智能仪器有限公司 | 艾乐贝拉细胞研究中心 | 国家组织工程种子细胞库华南分库 | 「安徽双凯」自动售货机-无人售货机-成人用品-自动饮料食品零食售货机 | _网名词典_网名大全_qq网名_情侣网名_个性网名 | 房在线-免费房产管理系统软件-二手房中介房屋房源管理系统软件 | 轴承振动测量仪电箱-轴承测振动仪器-测试仪厂家-杭州居易电气 | 安全,主动,被动,柔性,山体滑坡,sns,钢丝绳,边坡,防护网,护栏网,围栏,栏杆,栅栏,厂家 - 护栏网防护网生产厂家 | led全彩屏-室内|学校|展厅|p3|户外|会议室|圆柱|p2.5LED显示屏-LED显示屏价格-LED互动地砖屏_蕙宇屏科技 | J.S.Bach 圣巴赫_高端背景音乐系统_官网 | 上海恒驭仪器有限公司-实验室平板硫化机-小型平板硫化机-全自动平板硫化机 | 上海盐水喷雾试验机_两厢式冷热冲击试验箱-巨怡环试 | Safety light curtain|Belt Sway Switches|Pull Rope Switch|ultrasonic flaw detector-Shandong Zhuoxin Machinery Co., Ltd | 新型锤式破碎机_新型圆锥式_新型颚式破碎机_反击式打沙机_锤式制砂机_青州建源机械 | 恒温恒湿箱(药品/保健品/食品/半导体/细菌)-兰贝石(北京)科技有限公司 | 【法利莱住人集装箱厂家】—活动集装箱房,集装箱租赁_大品牌,更放心 | MES系统-WMS系统-MES定制开发-制造执行MES解决方案-罗浮云计算 | 密集架-密集柜厂家-智能档案密集架-自动选层柜订做-河北风顺金属制品有限公司 | 柴油机_柴油发电机_厂家_品牌-江苏卡得城仕发动机有限公司 | 混合反应量热仪-高温高压量热仪-微机差热分析仪DTA|凯璞百科 | 外观设计_设备外观设计_外观设计公司_产品外观设计_机械设备外观设计_东莞工业设计公司-意品深蓝 | 上海物流公司,上海货运公司,上海物流专线-优骐物流公司 | 不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰]-不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰] | 韦伯电梯有限公司 | 钢衬四氟管道_钢衬四氟直管_聚四氟乙烯衬里管件_聚四氟乙烯衬里管道-沧州汇霖管道科技有限公司 | 深圳善跑体育产业集团有限公司_塑胶跑道_人造草坪_运动木地板 | PSI渗透压仪,TPS酸度计,美国CHAI PCR仪,渗透压仪厂家_价格,微生物快速检测仪-华泰和合(北京)商贸有限公司 |