mysqli操作數據庫


1 連接數據庫:可以使用對象或函數來連接(我們這里主要用mysqli對象,附帶着函數連接)

//創建mysqli對象(也可以叫做資源句柄)
$_mysqli = new mysqli();
//連接數據庫
//如果不使用面向對象,完全可以使用mysqli_connect()函數來連接
$_mysqli->connect('localhost', 'root', 'kang123456', 'guest');

//斷開mysqli
//mysqli_close()函數
$_mysqli->close();

還可以創建對象時直接連接

//創建mysqli對象時直接連接數據庫
$_mysqli = new mysqli('localhost', 'root', 'kang123456', 'guest');
//另外選擇一個數據庫
$_mysqli->select_db('testguest');

$_mysqli->close();

2 錯誤:連接錯誤和操作錯誤

連接錯誤:

//連接錯誤
//當因為參數錯誤導致連接失敗是,對象沒有創建成功,所以就沒有權力調用mysqli對象的方法,所以要用函數方式去捕捉錯誤
@$_mysqli = new mysqli('localhost', 'roo', 'kang123456', 'guest');
//0表示沒有任何錯誤
if (mysqli_connect_errno()){
    echo '數據庫連接錯誤'.mysqli_connect_error();
    exit();
}
$_mysqli->close();

操作錯誤:

//操作錯誤
@$_mysqli = new mysqli('localhost', 'root', 'kang123456', 'guest');
//選擇一個不存在的數據庫,產生操作錯誤
$_mysqli->select_db('dfas');
//操作錯誤
if ($_mysqli->errno){
    echo '數據庫操作錯誤'.$_mysqli->error;
    exit();
}
$_mysqli->close();

3 與數據庫進行交互:創建 獲取 更新 刪除

創建與獲取

<?php
//操作錯誤
    @$_mysqli = new mysqli('localhost', 'root', 'kang123456', 'testguest');
    //1 設置編碼
    $_mysqli->set_charset('utf8');
    //2 創建sql
    $_sql = 'select * from tg_user';
    //3 執行sql,把結果集賦給變量
    $_result = $_mysqli->query($_sql);
    //取得第一行數據,運行一次,指針下移一條
    $_user = $_result->fetch_row();
    //4 獲取
    //4-1 使用索引數組循環出用戶名
    while (!!$_row = $_result->fetch_row()){
        echo $_row[3].'<br />';
    }
    //4-2 使用關聯數組循環出用戶名
    while (!!$_assoc = $_result->fetch_assoc()){
        echo $_assoc['tg_username'].'<br />';
    }
    //4-3 使用索引加關聯數組
    print_r($_result->fetch_array());
    //4-4 使用oop方式,但返回的是對象
    while (!!$_object = $_result->fetch_object()){
        echo $_object->tg_username.'<br />';
    }
?>

查看選擇了多少行和影響了多少行:影響了多少行是mysqli下的屬性

    //確定選擇了多少行和受影響的行
    @$_mysqli = new mysqli('localhost', 'root', 'kang123456', 'testguest');
    if ($_mysqli->errno){
        echo '數據庫連接錯誤'.$_mysqli->error;
    }
    $_mysqli->set_charset('utf8');
    $_sql = 'select * from tg_user limit 0,10';
    $_result = $_mysqli->query($_sql);
    //看選擇了多少行,只有查
    echo $_result->num_rows; //10
    //增刪改查影響了多少行(如果改成一樣的影響0行)
    echo $_mysqli->affected_rows;//10

獲取字段(列)

    //1 查看結果集里有多少字段(列)
    echo $_result->field_count;
    //2 獲取字段的名字,一次一個,指針下移
    $_field = $_result->fetch_field();//返回的是對象
    echo $_field->name; //tg_id
    print_r($_field);//打印如下
/*     stdClass Object
    (
        [name] => tg_id
        [orgname] => tg_id
        [table] => tg_user
        [orgtable] => tg_user
        [def] =>
        [db] => testguest
        [catalog] => def
        [max_length] => 2
        [length] => 8
        [charsetnr] => 63
        [flags] => 49699
        [type] => 9
        [decimals] => 0
    ) */
    //遍歷
    while (!!$_field = $_result->fetch_field()) {
        echo $_field->name.'<br />';
    }
    //3 一次性取得所有字段
    $_fields = $_result->fetch_fields(); //返回的是數組,每個是和上邊一樣的對象
    print_r($_fields);
    //遍歷
    foreach ($_fields as $_field){
        echo $_field->name.'<br />';
    }

移動指針:移動數據指針和移動字段指針

    //移動指針
    //1 移動數據指針
    $_result->data_seek(0);//移動到第0個就是原來的位置
    $_row = $_result->fetch_row();
    echo $_row[3];
    
    //2 移動字段指針
    $_result->field_seek(0);
    $_field = $_result->fetch_field();
    echo $_field->name; //tg_id

多條sql語句一起執行

    //創建三個修改的sql語句
    $_sql .= 'update tg_user set tg_username="黨興明" where tg_id=43;';
    $_sql .= 'update tg_flower set tg_fromuser="黨興明" where tg_id=1;';
    $_sql .= 'update tg_friend set tg_fromuser="黨興明" where tg_id=1';
    //一起執行
    $_mysqli->multi_query($_sql);
    //創建三條選擇數據
    $_sql .= 'select * from tg_user;';
    $_sql .= 'select * from tg_flower;';
    $_sql .= 'select * from tg_friend';
    //echo $_mysqli->multi_query($_sql);  //1
    if ($_mysqli->multi_query($_sql)){
        //獲取當前結果集
        $_result = $_mysqli->store_result();  //第一條sql語句
        print_r($_result->fetch_row());
        echo '<br >';
        //將結果集指針移動到下一條
        $_mysqli->next_result();
        $_result = $_mysqli->store_result();  //第二條sql語句
        print_r($_result->fetch_row());
        echo '<br >';
        //將結果集指針移動到下一條
        $_mysqli->next_result();
        $_result = $_mysqli->store_result();  //第三條sql語句
        print_r($_result->fetch_row());
    }else {
        echo '錯誤';
        exit();
    }

事務:

    //事務
    @$_mysqli = new mysqli('localhost', 'root', 'kang123456', 'testguest');
    $_mysqli->set_charset('utf8');
    //關閉自動提交
    $_mysqli->autocommit(false);
    //創建兩個sql語句
    $_sql .= 'update tg_flower set tg_flower=tg_flower-50 where tg_id=1;';
    $_sql .= 'update tg_friend set tg_state=tg_state+50 where tg_id=1';
    
    //執行多條sql語句,只有兩句都成功就成功,否則回滾
    if ($_mysqli->multi_query($_sql)){
        //通過影響的行數,來判斷是否成功執行,如果sql語句有誤,那么就執行回滾,否則手工提交
        $_success = $_mysqli->affected_rows == 1 ? true : false;
        //下移指針
        $_mysqli->next_result();
        $_success2 = $_mysqli->affected_rows == 1 ? true : false;
        //如果兩條都成功
        if ($_success && $_success2){
            //手工提交
            $_mysqli->commit();
            echo '完美提交';
        }else {
            //否則回滾
            $_mysqli->rollback();
            echo '回滾, 操作歸零';
        }
    }else {
        echo '第一條有錯誤';
        exit();
    }
    //開啟自動提交
    $_mysqli->autocommit(true);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM