phpmysqli類封裝
你剛才的截圖的:$db=new
mysqli(.....);
new是初始化mysqli類的意思
你用的是類對吧
你用的是mysqli類,如果你需要把查詢結果讀到數組,你是不可以使用mysqli_fetch_array等函數的(因為類會把函數封裝,過程函數是沒辦法用的)。
你只能使用你這個類裡面的函數,去看看這個類應該有把查詢結果讀到數組的函數的。
----------------------------------------------------------------------------------------------------------------------
如果你用的是過程,那麼應該這么寫:
<?php
mysql_connect('127.0.0.1','root','123456');
//連接資料庫,主機名127.0.0.1,用戶名root,密碼123456
mysql_select_db('phpmyadmin');
//選擇資料庫phpmyadmin
$user=$_POST['uid'];
//把post的uid保存為user變數
$sql="select
*
from
userinfo
where
username='$user'";
//定義sql語句
$query=mysql_query($sql);
//執行,並保存為變數
$row=mysql_fetch_array($query);
//把執行結果保存為變數
echo
$row['sex'];
//輸出一個做測試
?>
如果不行,你可以把mysql換成mysqli
『貳』 php怎麼用mysqli鏈接資料庫和輸出sql
一、mysql與mysqli的概念相關:
1、mysql與mysqli都是php方面的函數集,與mysql資料庫關聯不大。
2、在php5版本之前,一般是用php的mysql函數去驅動mysql資料庫的,比如mysql_query()的函數,屬於面向過程3、在php5版本以後,增加了mysqli的函數功能,某種意義上講,它是mysql系統函數的增強版,更穩定更高效更安全,與mysql_query()對應的有mysqli_query(),屬於面向對象,用對象的方式操作驅動mysql資料庫
二、mysql與mysqli的區別:
1、mysql是非持繼連接函數,mysql每次鏈接都會打開一個連接的進程。
2、mysqli是永遠連接函數,mysqli多次運行mysqli將使用同一連接進程,從而減少了伺服器的開銷。mysqli封裝了諸如事務等一些高級操作,同時封裝了DB操作過程中的很多可用的方法。
三、mysql與mysqli的用法:
1:mysql(過程方式):
$conn =
mysql_connect('localhost', 'user', 'password');//連接mysql資料庫mysql_select_db('data_base');
//選擇資料庫$result =
mysql_query('select * from data_base');//第二個可選參數,指定打開的連接$row =
mysql_fetch_row( $result ) ) //只取一行數據echo
$row[0]; //輸出第一個欄位的值
PS:mysqli以過程式的方式操作,有些函數必須指定資源,比如mysqli_query(資源標識,SQL語句),並且資源標識的參數是放在前面的,而mysql_query(SQL語句,'資源標識')的資源標識是可選的,默認值是上一個打開的連接或資源。
2、mysqli(對象方式):
$conn = new
mysqli('localhost', 'user', 'password','data_base');//要使用new操作符,最後一個參數是直接指定資料庫//假如構造時候不指定,那下一句需要$conn -> select_db('data_base')實現$result =
$conn -> query( 'select * from data_base' );$row =
$result -> fetch_row(); //取一行數據echo
row[0]; //輸出第一個欄位的值
使用new mysqli('localhost', usenamer', 'password', 'databasename');會報錯,提示如下:
Fatal error: Class 'mysqli' not found in ...
一般是mysqli是沒有開啟的,因為mysqli類不是默認開啟的,win下要改php.ini,去掉php_mysqli.dll前的;,linux下要把mysqli編譯進去。
四、mysql_connect()與mysqli_connect()
1.使用mysqli,可以把資料庫名稱當作參數傳給mysqli_connect()函數,也可以傳遞給mysqli的構造函數;
2.如果調用mysqli_query()或mysqli的對象查詢query()方法,則連接標識是必需的。
『叄』 如何在php中擴展mysqli插件。
Mysqli是php5之後才有的功能,沒有開啟擴展的可以打開php.ini的配置文件
查找下面的語句:;extension=php_mysqli.dll將其修改為:extension=php_mysqli.dll即可。
相對於mysql有很多新的特性和優勢
(1)支持本地綁定、准備(prepare)等語法
(2)執行sql語句的錯誤代碼
(3)同時執行多個sql
(4)另外提供了面向對象的調用介面的方法。
『肆』 php使用mysqli和pdo擴展,測試對比mysql資料庫的執行效率完整示例
本文實例講述了php使用mysqli和pdo擴展,測試對比mysql資料庫的執行效率。分享給大家供大家參考,具體如下:
<?php
/**
*
測試pdo和mysqli的執行效率
*/
header("Content-type:text/html;charset=utf-8");
//通過pdo鏈接資料庫
$pdo_startTime
=
microtime(true);
$pdo
=
new
PDO("mysql:host=localhost;dbname=test","root","1234",array(PDO::MYSQL_ATTR_INIT_COMMAND
=>
"SET
NAMES'utf8';"));
for($i=1;$i<=100;$i++){
$title
=
"pdo標題".$i;
$content
=
"pdo內容".$i;
$addtime
=
time();
$user_id
=
$i;
$pdo_sql
=
"INSERT
INTO
`article`(`title`,`content`,`addtime`,`user_id`)
VALUES(:title,:content,:addtime,:user_id)";
$sth
=
$pdo->prepare($pdo_sql);
$sth->bindParam(':title',$title);
$sth->bindParam(':content',$content);
$sth->bindParam(':addtime',$addtime);
$sth->bindParam(':user_id',$user_id);
$sth->execute();
}
$pdo_endTime
=
microtime(true);
$pdo_time
=
$pdo_endTime
-
$pdo_startTime;
echo
$pdo_time;
echo
"<hr/>";
//通過mysql鏈接資料庫
$mysqli_startTime
=
microtime(true);
$mysqli
=
mysqli_connect("localhost","root","1234","test")
or
die("數據連接失敗");
mysqli_query($mysqli,"set
names
utf8");
for($i=1;$i<=100;$i++){
$title
=
"mysqli標題".$i;
$content
=
"mysqli內容".$i;
$addtime
=
time();
$user_id
=
$i;
$sql
=
"INSERT
INTO
`article`(`title`,`content`,`addtime`,`user_id`)
VALUES('".$title."','".$content."',".$addtime.",".$user_id.")";
mysqli_query($mysqli,$sql);
}
$mysqli_endTime
=
microtime(true);
$mysqli_time
=
$mysqli_endTime
-
$mysqli_startTime;
echo
$mysqli_time;
echo
"<hr/>";
if($pdo_time
>
$mysqli_time){
echo
"pdo的執行時間是mysqli的".round($pdo_time/$mysqli_time)."倍";
}else{
echo
"mysqli的執行時間是pdo的".round($mysqli_time/$pdo_time)."倍";
}
測試結果:其實經過多次測試,pdo和mysqli的執行效率差不多。
更多關於PHP相關內容感興趣的讀者可查看本站專題:《PHP基於pdo操作資料庫技巧總結》、《php+mysqli資料庫程序設計技巧總結》、《php面向對象程序設計入門教程》、《php字元串(string)用法總結》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧匯總》
希望本文所述對大家PHP程序設計有所幫助。
您可能感興趣的文章:php使用mysqli和pdo擴展,測試對比連接mysql資料庫的效率完整示例php中資料庫連接方式pdo和mysqli對比分析php中關於mysqli和mysql區別的一些知識點分析php操作mysqli(示例代碼)php封裝的mysqli類完整實例PHP以mysqli方式連接類完整代碼實例php簡單解析mysqli查詢結果的方法(2種方法)php中mysql連接方式PDO使用詳解Php中用PDO查詢Mysql來避免SQL注入風險的方法php
mysql
PDO
查詢操作的實例詳解PHP實現PDO的mysql資料庫操作類
『伍』 mysql與mysqli的區別與用法說明
也就是說
mysql每次鏈接都會打開一個連接的進程而mysqli多次運行mysqli將使用同一連接進程,從而減少了伺服器的開銷
有些朋友在編程的時候,使用new
mysqli('localhost',
usenamer',
'password',
'databasename');總是報錯,Fatal
error:
Class
'mysqli'
not
found
in
d:\...
mysqli類不是php自帶的嗎?
不是默認開啟的,win下要改php.ini,去掉php_mysqli.dll前的;,linux下要把mysqli編譯進去
mysql是非持繼連接函數而mysqli是永遠連接函數,也就是說
mysql每次鏈接都會打開一個連接的進程而mysqli多次運行mysqli將使用同一連接進程,從而減少了伺服器的開銷
有些朋友在編程的時候,使用new
mysqli('localhost',
usenamer',
'password',
'databasename');總是報錯,Fatal
error:
Class
'mysqli'
not
found
in
d:\...
mysqli類不是php自帶的嗎?
不是默認開啟的,win下要改php.ini,去掉php_mysqli.dll前的;,linux下要把mysqli編譯進去
mysqli的面向過程的使用:
復制代碼
代碼如下:
$conn
=
mysqli_connect('localhost',
'root',
'123',
'db_test')
or
('error');
$sql
=
"select
*
from
db_table";
$query
=
mysqli_query($conn,$sql);
while($row
=
mysqli_fetch_array($query)){
echo
$row['title'];
}
mysqli的面向對象的使用:
復制代碼
代碼如下:
$conn
=
mysqli('localhost',
'root',
'123',
'db_test');
$sql
=
"select
*
from
db_table";
$query
=
$conn->query($sql);
while($row
=
$query->fetch_array()){
echo
$row['title'];
}
mysql_pconnect打開的連接不會關閉(即使調用mysql_close也不會關閉,因為對其無效),
類似於連接緩沖池,如果下次有來自於同一個機器的同一個用戶名
對同一個資料庫的連接,php會自動使用上次已經建立的連接,而不需要再重新建立一個。
好處:是省去了每次與資料庫建立連接的開銷,
壞處:是需要浪費一些內存,佔用一些連接,
所以如果用戶訪問量大的時候會出現錯誤,要把mysql的max_connections參數改大一點,
或者使用mysql_connect()就解決問題。
首先兩個函數都是用來處理DB
的。
首先,
mysqli
連接是永久連接,而mysql是非永久連接。什麼意思呢?
mysql連接每當第二次使用的時候,都會重新打開一個新的進程,而mysqli則只使用同一個進程,這樣可以很大程度的減輕伺服器端壓力。
其次,mysqli封裝了諸如事務等一些高級操作,同時封裝了DB操作過程中的很多可用的方法。具體查看
http://cn.php.net/mysqli
應用比較多的地方是
mysqli的事務。
比如下面的示例:
復制代碼
代碼如下:
$mysqli
=
new
mysqli('localhost','root','','DB_Lib2Test');
$mysqli->autocommit(false);//開始事物
$mysqli->query($sql1);
$mysqli->query($sql2);
if(!$mysqli->errno){
$mysqli->commit();
echo
'ok';
}else{
echo
'err';
$mysqli->rollback();
}
『陸』 大家php開發使用mysqli還是pdo
pdo 比 mysqli 要好。
而且 mysqli 只能使用在 mysql 資料庫;
而 pdo 對各種主流資料庫都有封裝,使用方法基本一樣。
『柒』 PHP資料庫操作之基於Mysqli的資料庫操作類庫
此類庫簡單、易用,便於你自己修改和對功能的改善,能解決大部分
PHP
項目中執行的
SQL
操作。
初步工作
首先,請大家下載這個類庫
M.class.php 再下載一個
Mysqli
連接資料庫的類庫
MysqliDb.class.php(打包下載地址)
新建一個
includes
的文件夾,將下載下來的兩個
class
文件,放進去。
然後,請你在項目下創建一個
test.php
文件。註:UTF-8
文件格式
請先根據你機器的情況,填充以下代碼,用於連接資料庫:
復制代碼
代碼如下:
header('Content-Type:text/html;Charset=utf-8');
define('ROOT_PATH',
dirname(__FILE__));
define('DB_HOST',
'localhost');
//資料庫伺服器地址
define('DB_USER',
'root');
//資料庫用戶名
define('DB_PWD',
'×××');//資料庫密碼
define('DB_NAME',
'×××');
//資料庫名稱
define('DB_PORT',
'3306');
//資料庫埠
function
__autoload($className)
{
require_once
ROOT_PATH
.
'/includes/'.
ucfirst($className)
.'.class.php';
//自動載入
class
文件
}
好了,上面的這些操作都是初步工作,下面正式進入類庫的講解。
類庫講解
首先,我們得實例化
M.class.php,實例化很簡單:
復制代碼
代碼如下:
$m
=
new
M();
//這步操作代表
M.class.php
中的所有功能都封裝在了變數
$m
中
註:
1、M類庫中的方法參數說明,請到
M.class.php
文件中看詳細的注釋,這里不再進行敘述。建議在學習的時候,對照著看下文件中的參數即注釋。
2、講解代碼中用到的資料庫結構為:
復制代碼
代碼如下:
CREATE
TABLE
`user`
(
`id`
int(8)
unsigned
NOT
NULL
auto_increment,
`name`
varchar(50)
default
NULL,
`email`
varchar(100)
default
NULL,
`age`
smallint(3)
default
NULL,
`class_id`
int(8)
default
NULL,
`commit_time`
int(10)
default
NULL,
PRIMARY
KEY
(`id`),
KEY
`name`
(`name`)
)
ENGINE=MyISAM
DEFAULT
CHARSET=utf8
復制代碼
代碼如下:
CREATE
TABLE
`class`
(
`class_id`
int(8)
NOT
NULL
auto_increment,
`class_name`
varchar(100)
default
NULL,
PRIMARY
KEY
(`class_id`)
)
ENGINE=InnoDB
DEFAULT
CHARSET=utf8
並添加一條測試數據。
3、M類庫中,大部分方法都分兩中類型,即:SQL方法;拼接方法,具體在實例中可以看出
4、以下稱述中的
M
為
M.class.php
文件
方法1、Insert()
添加數據
Insert
方法的全部使用案例如下:
復制代碼
代碼如下:
$m->Insert("user",
null,
array('焦焦',
'[email protected]',
'23',
time()));
//
拼接方法:往`user`表中添加一條數據,返回值為資料庫影響的行數
$m->Insert("user",
null,
array('焦焦',
'[email protected]',
'23',
time()),
true);
//
功能同上,返回
last_insert_id(插入的增長id)
$m->Insert("INSERT
INTO
`user`
(`name`,
`email`,
`age`,
`commit_time`)
VALUES
('張小花',
'[email protected]',
'22',
'".time()."')");
//SQL方法,返回值為資料庫影響的行數
$m->Insert("INSERT
INTO
`user`
(`name`,
`email`,
`age`,
`commit_time`)
VALUES
('張小花',
'[email protected]',
'22',
'".time()."')",
true);
//
同上,返回
last_insert_id
註:Insert
方法中的第二個參數若為null,可自動獲得插入表除
auto_increment
欄位之外的所有欄位,詳情請看M源文件;若要返回值為最後插入的
ID,那麼請設置
Insert
方法的最後一個參數為
true(默認是false);
方法2、Update()
修改數據
update
方法的全部使用案例如下:
復制代碼
代碼如下:
$m->Update("user",
array('name'=>'李茹茹',
'age'=>24),
"id=1");
//拼接方法,修改id為1的數據的名稱為「李茹茹」;年齡為「24」,其方法的返回值為受影響的行數
$m->Update("UPDATE
`user`
SET
`name`='李茹茹',
`age`=24
WHERE
id
=
1");
//SQL
用法,功能同上
方法3、Del()
刪除數據
Del
方法的全部使用案例如下:
復制代碼
代碼如下:
$m->Del('user',
'id=3');
//拼接方法:刪除`user`表中
id
為3的數據,返回受影響的行數
$m->Del("DELETE
FROM
`user`
WHERE
id=4");
//SQL方法:刪除`user`表中
id
為4的數據,返回受影響的行數
$m->Del("DELETE
FROM
`user`
WHERE
id
in
(10,
11,
12)");
//SQL方法:刪除多條數據,刪除`user`表中
id
為
10、11、12
的數據,返回受影響的行數
方法4、Total()
獲取記錄數,返回值都為int
Del
方法的全部使用案例如下:
復制代碼
代碼如下:
$m->Total('user');
//拼接方法:返回
`user`表中的記錄數,無條件
$m->Total('user',
'id>1');
//拼接方法:返回
`user`表中
id
大於1的記錄數,有條件
$m->Total("SELECT
COUNT(*)
AS
total
FROM
`user`");
//SQL方法,註:使用SQL方法,語句中必須使用
"AS
total",否則會報錯
方法5、IsExists()
檢查數據是否存在,返回值為boolean
復制代碼
代碼如下:
$m->IsExists('user',
"`name`='焦焦'");
//拼接方法:返回`user`表中是否存在`name`為「焦焦」的數據,返回true,若不存在,返回false
方法6、InsertId()
獲取表下一個添加的自動增長id,注意,這里不進行添加操作,只是獲取下一個增長id
復制代碼
代碼如下:
echo
$m->InsertId('user');
//獲取`user`
表下一個添加的自動增長id
方法7、GetRow()
返回單條數據,返回值為一維數組
GetRow
方法的全部使用案例如下:
復制代碼
代碼如下:
$data
=
$m->GetRow("SELECT
`name`,email
FROM
`user`
WHERE
id=1");
//SQL方法,返回一維數組,例如:Array
(
[name]
=>
焦焦
[email]
=>
[email protected]
)
$data
=
$m->GetRow("SELECT
u.`name`,
u.email,
c.class_name
FROM
`user`
u,
`class`
c
WHERE
u.class_id=c.class_id
AND
u.id=1");
//SQL方法,多表查詢
$data
=
$m->GetRow('user',
'`name`,email',
"id=1");
//拼接方法
$data
=
$m->GetRow('user
as
u,`class`
c',
'u.`name`,u.email,c.class_name',
"u.id=1
AND
u.class_id=c.class_id");
//拼接方法,多表查詢
$data
=
$m->GetRow("SELECT
`name`,email
FROM
`user`");
//如果沒有指定條件應該是顯示全部信息,但是在此方法中將默認顯示第一條(不推薦這么使用!!!)
$data
是查詢出來的一維數組。
方法8、GetOne()
返回單個數據
GetOne
方法的全部使用案例如下:
復制代碼
代碼如下:
$name
=
$m->GetOne("SELECT
`name`
FROM
`user`
WHERE
id=1");
//SQL方法,返回一個字元串,例如:焦焦
$name
=
$m->GetOne("user",
"name",
"id=1");
//拼接方法,返回一個字元串,例如:焦焦
方法9、FetchAll()
返回所有記錄
復制代碼
代碼如下:
$data
=
$m->FetchAll("user");
//返回`user`表中的所有記錄,以二維數組的形式
$data
=
$m->FetchAll("SELECT
*
FROM
`user`");
//SQL
方法,功能和返回值同上
$data
=
$m->FetchAll("user",
"name,email",
"id>1",
'id
DESC',
'2');
//返回兩條id>1的數據,只顯示name,email,並且以id
為倒序排序。註:請注意該方法的最後一個參數也可以為'0,2',目的是為分頁准備的,如果第一頁為'0,2'的話,那麼第二頁就是'2,2'
//該方法也支持聯表查詢和多表查詢,下面以聯表查詢為例
$data
=
$m->FetchAll("`user`
as
u
LEFT
JOIN
`class`
as
c
ON
u.class_id=c.class_id",
"u.`name`,u.email,
c.class_name",
"u.id=1");
//注意:該拼接方法中,ON
添加的位置
註:對於該
FetchAll
方法,後續我會寫一篇使用該方法進行完美分頁的文章!!請關注。
方法10、MultiQuery()
執行多條SQL語句
復制代碼
代碼如下:
$sql
=
"INSERT
INTO
user
(`name`,email,
age,
class_id,
commit_time)
VALUES
('賈花花',
'[email protected]',
'22',
'1',
'".time()."')";
//添加一個名叫「賈花花」的學生信息
$sql
.=
";DELETE
FROM
`user`
WHERE
`name`='焦焦'";
//刪除一條名叫「焦焦」的學生信息
//解釋:$sql
是多條
SQL
以英文;(分號)拼接起來的
$data
=
$m->MultiQuery($sql);
//返回為true,代表執行成功;為false,代表執行失敗
類庫講解完畢
到此該類庫的全部功能就講解完畢,希望你能多看看M文件,了解其內部運行的機制。M
文件不會存在執行緩慢情況,請大家放心使用。
如果在使用過程中出現
SQL
拼接錯誤,類庫會報出友善的錯誤提示。
有問題請留言,歡迎大家的批評和建議,加油!學習好運。
『捌』 php 求一個mysqli的db類注釋盡可能的多,初學小白
mysqli一個最簡單的例子,要深入封裝的話可以自己再增加...
其實個人覺得mysqli已經沒什麼必要封裝了.....
<?php
classdb{ //類名
public$con; //定義句柄
public$result; //結果存取
publicfunction__construct($Host,$User,$Pass,$DB){ //構建函數
$this->con=newmysqli($Host,$User,$Pass,$DB); //調用mysqli類
if($this->con->connect_error){ //判斷是否有錯誤,有錯誤則返回連接錯誤代號和錯誤內容
returnarray($this->con->connect_errno,$this->con->connect_error);
}
}
publicfunctionquery($sql,$type=''){ //執行查詢,$sql為查詢語句,$type為resultmode[MYSQLI_USE_RESULT]OR[MYSQLI_STORE_RESULT]執行成功返回true,否則返回false
$this->result=empty($type)?$this->con->query($sql):$this->con->query($sql,$type);
return!$this->result?false:true;
}
publicfunctioninsertid(){ //必須先進行query才能獲得插入或更新的id
return$this->con->insert_id;
}
publicfunctionfetch($n,$t){//獲取結果集,$n必選[array][assoc][field_direct][field][fields][object][row][all],$t為$n對應的可選參數,成功返回結果集
$f='fetch_'.$n;
return$this->result->$f($t);
}
publicfunction__destruct(){ //銷毀函數
if($this->result)$this->result->close();
if($this->con)$this->con->close();
}
publicfunctionGetError(){ //獲取錯誤
returnarray($this->con->errno,$this->con->error);
}
}
$db=newdb('127.0.0.1','','','test');
if(!$db->query("insertintotb(`time`,`amount`)values('1420085532','300')")){
var_mp($db->GetError());
die();
}
echo$db->insertid(),PHP_EOL;
$db->query('select*fromtb');
while($arr=$db->fetch('array',MYSQLI_NUM)){
echo$arr['0'],'',$arr['1'],'',$arr['2'],'',PHP_EOL;
}