久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

MySQL丨PHP 獲取查詢結(jié)果

 CKO養(yǎng)成計(jì)劃 2020-09-27

本期要點(diǎn):

  • 了解 mysqli_result 類是如何從數(shù)據(jù)庫查詢中獲取結(jié)果集的

  • 通過 mysqli::query 的返回值得到 mysqli_result 對象

  • 通過調(diào)用 fetch_array() 方法從結(jié)果集獲取出數(shù)據(jù)

  • 如何依次獲取多條數(shù)據(jù)

  • while 循環(huán)

  • 將查詢結(jié)果保存到數(shù)組

mysqli_result 類


我們接著MySQL丨通過 PHP 執(zhí)行 SQL 語句》中的內(nèi)容,把之前的 SQL 語句更換成:ELECT * FROM msg ORDER BY id DESC(也就是按 id 進(jìn)行倒序排列)

<?php 

header("Content-type: text/html; charset=utf-8");    //如果瀏覽器輸出亂碼就加上這一句

//預(yù)先定義數(shù)據(jù)庫連接參數(shù)

$host = '127.0.0.1'; 

$user = 'root'; 

$pwd = 'root'; 

$dbname = 'php'; 

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

$db = new mysqli($host, $user, $pwd, $dbname); 

//檢查連接是否成功

if ( $db->connect_errno <> 0 ) { 

    echo "鏈接失敗"; 

    echo $db->connect_error; 

}

//編寫SQL

//$sql = "INSERT INTO msg (content,user,intime) VALUES ('aaa','bbb',123456)";     注釋掉原來的語句

$sql = "SELECT * FROM msg ORDER BY id DESC";

//執(zhí)行SQL

$is = $db->query( $sql );     //獲取返回值 

var_dump( $is );

//判斷執(zhí)行是否成功

if ( $is == true) { 

    echo "插入成功"; 

}else { 

    echo "插入失敗"; 

}

然后在瀏覽器輸出,看到返回值不是布爾值,而變成了一個(gè)對象:

我們可以看到對象來自 mysqli_result 個(gè)類(類的實(shí)例化就是對象)。

  • mysqli_result 類是一個(gè)系統(tǒng)類,代表從一個(gè)數(shù)據(jù)庫查詢中獲取的結(jié)果集。

  • 語法參考:【PHP 手冊】-【函數(shù)參考】-【數(shù)據(jù)庫擴(kuò)展】-【針對各數(shù)據(jù)庫系統(tǒng)對應(yīng)的擴(kuò)展】-【MySQL】-【Mysqli】-【Mysqli_result】

mysqli::query 的返回值


從上面的內(nèi)容我們可以看到 SQL 的執(zhí)行語句($is = $db->query( $sql );)在更改之前跟更改之后所得到的結(jié)果是不一樣的(一個(gè)是布爾值,,一個(gè)是對象)。

這就源于 mysqli::query 的返回值,。

mysqli::query 的返回值語法:

  • 失敗時(shí)返回 FALSE

  • 通過 mysqli_query() 成功執(zhí)行 SELECT,,SHOW,DESCRIBE 或 EXPLAIN 查詢會返回一個(gè) mysqli_result 對象

  • 其他查詢則返回 TRUE

PS:因?yàn)槲覀兩厦娴膬?nèi)容所執(zhí)行的是一個(gè) SELECT 語句,,所以輸出的是對象,。

語法參考:【PHP 手冊】-【函數(shù)參考】-【數(shù)據(jù)庫擴(kuò)展】-【針對各數(shù)據(jù)庫系統(tǒng)對應(yīng)的擴(kuò)展】-【MySQL】-【Mysqli】-【Mysqli】-【mysqli::query】

mysql_fetch_array() 函數(shù)


mysql_fetch_array() 函數(shù)(方法)的作用是從結(jié)果集中取得一行作為關(guān)聯(lián)數(shù)組,或數(shù)字?jǐn)?shù)組,,或二者兼有,;

返回根據(jù)從結(jié)果集取得的行生成的數(shù)組,如果沒有更多行則返回 false,。

語法參考:【PHP 手冊】-【函數(shù)參考】-【數(shù)據(jù)庫擴(kuò)展】-【針對各數(shù)據(jù)庫系統(tǒng)對應(yīng)的擴(kuò)展】-【MySQL】-【Mysqli】-【Mysqli_result】

針對 mysqli::query 的返回值可能會出現(xiàn)兩種數(shù)據(jù)的可能性,,我們需要對它的返回值進(jìn)行一個(gè)判斷:

  • 如果返回的是對象 mysqli_result 對象

  • 則調(diào)用 fetch_array() 方法(取出數(shù)據(jù)庫中的一條數(shù)據(jù))

<?php 

header("Content-type: text/html; charset=utf-8");    //如果瀏覽器輸出亂碼就加上這一句

//預(yù)先定義數(shù)據(jù)庫連接參數(shù)

$host = '127.0.0.1'; 

$user = 'root'; 

$pwd = 'root'; 

$dbname = 'php'; 

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

$db = new mysqli($host, $user, $pwd, $dbname); 

//檢查連接是否成功

if ( $db->connect_errno <> 0 ) { 

    echo "鏈接失敗"; 

    echo $db->connect_error; 

}

//編寫SQL

//$sql = "INSERT INTO msg (content,user,intime) VALUES ('aaa','bbb',123456)";     注釋掉原來的語句

$sql = "SELECT * FROM msg ORDER BY id DESC";

//執(zhí)行SQL

$is = $db->query( $sql );     //獲取返回值 

//對返回值進(jìn)行判斷 

if ( $is === false) { 

    echo "SQL錯(cuò)誤"; 

    exit; 

}

//得到mysqli_result對象后調(diào)用fetch_array()方法

var_dump( $is->fetch_array() );

瀏覽器輸出與數(shù)據(jù)庫對比:

我們可以看到瀏覽器輸出的是一個(gè)數(shù)組,其中的鍵值對都可以跟數(shù)據(jù)庫中的內(nèi)容一一對應(yīng)上,。

但好像重復(fù)了一次:其中一組是關(guān)聯(lián)數(shù)組,,一組是索引數(shù)組。

這里我們可以用一個(gè)常量 MYSQLI_ASSOC 把索引數(shù)組去掉,。

我們把上面fetch_array()方法加一個(gè)參數(shù):

//得到mysqli_result對象后調(diào)用fetch_array()方法

var_dump( $is->fetch_array( MYSQLI_ASSOC ) );

然后在瀏覽器再次輸出:

獲取多條數(shù)據(jù)


如果我們需要輸出多條數(shù)據(jù):

<?php 

header("Content-type: text/html; charset=utf-8");    //如果瀏覽器輸出亂碼就加上這一句

//預(yù)先定義數(shù)據(jù)庫連接參數(shù)

$host = '127.0.0.1'; 

$user = 'root'; 

$pwd = 'root'; 

$dbname = 'php'; 

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

$db = new mysqli($host, $user, $pwd, $dbname); 

//檢查連接是否成功

if ( $db->connect_errno <> 0 ) { 

    echo "鏈接失敗"; 

    echo $db->connect_error; 

}

//編寫SQL

//$sql = "INSERT INTO msg (content,user,intime) VALUES ('aaa','bbb',123456)";     注釋掉原來的語句

$sql = "SELECT * FROM msg ORDER BY id DESC";

//執(zhí)行SQL

$is = $db->query( $sql );     //獲取返回值 

//對返回值進(jìn)行判斷 

if ( $is === false) { 

    echo "SQL錯(cuò)誤"; 

    exit; 

}

//得到mysqli_result對象后調(diào)用fetch_array()方法

var_dump( $row = $is->fetch_array( MYSQLI_ASSOC ) ) ;

var_dump( $row = $is->fetch_array( MYSQLI_ASSOC ) ) ;

var_dump( $row = $is->fetch_array( MYSQLI_ASSOC ) ) ;

var_dump( $row = $is->fetch_array( MYSQLI_ASSOC ) ) ;

...

只要我們連續(xù)調(diào)用,,瀏覽器就會依次輸出:

  • 首次調(diào)用顯示最新的一條記錄

  • 重復(fù)調(diào)用,依次顯示后面的記錄

  • 如果沒有數(shù)據(jù)了就會顯示 NULL

瀏覽器輸出:

while 循環(huán)


這個(gè)應(yīng)該是屬于《PHP丨流程控制》中的內(nèi)容,,因?yàn)橹皼]講就插播一下,。

while 循環(huán)是 PHP 中最簡單的循環(huán)類型:

  • 值為 true 執(zhí)行循環(huán)

  • 如果值是 false 就停止循環(huán)

所以,根據(jù) while 循環(huán)的原理我們上面的代碼也可以這樣寫:

<?php 

header("Content-type: text/html; charset=utf-8");    //如果瀏覽器輸出亂碼就加上這一句

//預(yù)先定義數(shù)據(jù)庫連接參數(shù)

$host = '127.0.0.1'; 

$user = 'root'; 

$pwd = 'root'; 

$dbname = 'php'; 

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

$db = new mysqli($host, $user, $pwd, $dbname); 

//檢查連接是否成功

if ( $db->connect_errno <> 0 ) { 

    echo "鏈接失敗"; 

    echo $db->connect_error; 

}

//編寫SQL

//$sql = "INSERT INTO msg (content,user,intime) VALUES ('aaa','bbb',123456)";     注釋掉原來的語句

$sql = "SELECT * FROM msg ORDER BY id DESC";

//執(zhí)行SQL

$is = $db->query( $sql );     //獲取返回值 

//對返回值進(jìn)行判斷 

if ( $is === false) { 

    echo "SQL錯(cuò)誤"; 

    exit; 

}

//得到mysqli_result對象后調(diào)用fetch_array()方法

while ( $row = $is->fetch_array( MYSQLI_ASSOC )) { 

var_dump( $row ); 

}

瀏覽器輸出:

可以看到那些 NULL 也都沒了,,因?yàn)楫?dāng) while 的值為 false 時(shí)它就停止循環(huán)了,。

將查詢結(jié)果保存到數(shù)組


<?php 

//預(yù)先定義數(shù)據(jù)庫連接參數(shù)

$host = '127.0.0.1'; 

$user = 'root'; 

$pwd = 'root'; 

$dbname = 'php'; 

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

$db = new mysqli($host, $user, $pwd, $dbname); 

//檢查連接是否成功

if ( $db->connect_errno <> 0 ) { 

    echo "鏈接失敗"; 

    echo $db->connect_error; 

}

//編寫SQL

//$sql = "INSERT INTO msg (content,user,intime) VALUES ('aaa','bbb',123456)";     注釋掉原來的語句

$sql = "SELECT * FROM msg ORDER BY id DESC";

//執(zhí)行SQL

$is = $db->query( $sql );     //獲取返回值 

//對返回值進(jìn)行判斷 

if ( $is === false) { 

    echo "SQL錯(cuò)誤"; 

    exit; 

}

//得到mysqli_result對象后調(diào)用fetch_array()方法

$rows = [];

while ( $row = $is->fetch_array( MYSQLI_ASSOC )) { 

    $rows[] = $row;

}

var_dump( $rows );

瀏覽器輸出:

可以看到上面已經(jīng)成為了一個(gè)二維數(shù)組。

因?yàn)?span style="color: rgb(51, 51, 51);background-color: rgb(255, 255, 255);"> fetch_array() 只能調(diào)用一次數(shù)據(jù)庫中的數(shù)據(jù)(如果進(jìn)行第二次調(diào)用同一條數(shù)據(jù)就會顯示 NULL),,而如果我們需要在網(wǎng)頁中重復(fù)顯示數(shù)據(jù)就需要把所調(diào)出的數(shù)據(jù)保存在一個(gè)二維數(shù)組中,,以供重復(fù)調(diào)用。

如果我們需要把數(shù)組的鍵名改為它們的 id 的話,,只需要在 $rows[] =$row; 中加上 $rows[ $row['id'] 即是:$rows[ $rows[ $row['id'] ] = $row;

然后再次在瀏覽器輸出:

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多