久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      PHP中mysqli的基本操作有哪些

      MySQLi的擴(kuò)展相對(duì)于PDO來(lái)說(shuō)功能更加的豐富,所以我們依然還會(huì)在學(xué)習(xí)過(guò)程中穿插各種MySQLi中好玩的方法函數(shù)。不過(guò),今天的主角是MySQLi中如何執(zhí)行SQL語(yǔ)句以及多條SQL語(yǔ)句的執(zhí)行。

      PHP中mysqli的基本操作有哪些

      連接與選擇數(shù)據(jù)庫(kù)

      首先是一個(gè)小內(nèi)容的學(xué)習(xí)分享,依然還是連接數(shù)據(jù)庫(kù),不過(guò)這次我們用另外一種方式來(lái)進(jìn)行連接。

      $mysqli = new mysqli(); $mysqli->real_connect("localhost", "root", "", "blog_test");  var_dump($mysqli);  // ["thread_id"]=> // int(163)  $mysqli->real_connect("localhost", "root2", "123", "blog_test"); var_dump($mysqli); // ["thread_id"]=> // int(164)

      首先,我們實(shí)例化了一個(gè) mysqli 對(duì)象。在實(shí)例化過(guò)程中,我們并沒(méi)有給 mysqli 的構(gòu)造函數(shù)傳遞任何的參數(shù),而是使用 real_connect() 方法來(lái)傳遞數(shù)據(jù)庫(kù)服務(wù)器信息并建立連接。

      相信不少朋友從代碼中就可以看出,我們使用 real_connect() 可以在一個(gè) mysqli 實(shí)例下來(lái)切換不同的數(shù)據(jù)庫(kù)連接。通過(guò)打印 mysqli 對(duì)象的內(nèi)容就可以看出,兩個(gè)連接的線程ID不同,也就是說(shuō),它們是不同的兩個(gè)連接,但是使用的都是最上面所初始化的那個(gè) mysqli 對(duì)象。

      連接可以切換了,那么我們要連接的數(shù)據(jù)庫(kù)呢?當(dāng)然也可以方便地切換。

      $mysqli->select_db('mysql');

      就是這樣一個(gè)簡(jiǎn)單的 select_db() 方法,就可以幫助我們?cè)诖a執(zhí)行過(guò)程中動(dòng)態(tài)地修改所連接的數(shù)據(jù)庫(kù)。

      執(zhí)行 SQL 語(yǔ)句

      對(duì)于 PDO 來(lái)說(shuō),如果是查詢語(yǔ)句,我們需要使用 query() 方法,如果是增、刪、改之類的其它語(yǔ)句,我們要使用 exec() ,通過(guò)這兩個(gè)方法分別執(zhí)行不同的 SQL 語(yǔ)句。但是在 MySQLi 中,我們統(tǒng)一只使用 query() 方法就可以了。

      $mysqli->query("insert into zyblog_test_user(username, password, salt) values('3a', '3a', '3a')"); var_dump($mysqli->affected_rows); var_dump($mysqli->insert_id);  $mysqli->query("update zyblog_test_user set password='3aa' where username='3a'"); var_dump($mysqli->affected_rows);  $mysqli->query("delete from zyblog_test_user where id = 60"); var_dump($mysqli->affected_rows);  $res = $mysqli->query("select * from zyblog_test_user where username='3a'"); print_r($res); // mysqli_result Object // ( //     [current_field] => 0 //     [field_count] => 4 //     [lengths] => //     [num_rows] => 3 //     [type] => 0 // )  print_r($res->fetch_assoc()); // Array // ( //     [id] => 61 //     [username] => 3a //     [password] => 3aa //     [salt] => 3a // )  while ($row = $res->fetch_assoc()) {     print_r($row); } // Array // ( //     [id] => 62 //     [username] => 3a //     [password] => 3aa //     [salt] => 3a // ) // Array // ( //     [id] => 63 //     [username] => 3a //     [password] => 3aa //     [salt] => 3a // ) // ……

      對(duì)于增、刪、改之類的語(yǔ)句,query() 方法只會(huì)返回一個(gè)布爾值,也就是語(yǔ)句是否執(zhí)行成功。記住,它返回的不是受影響的行數(shù),這一點(diǎn)是需要注意的。我們?nèi)绻枰@取受影響的行數(shù)需要使用 MySQLi 的屬性 affected_rows 。對(duì)于插入語(yǔ)句來(lái)說(shuō),獲取最新插入的數(shù)據(jù)ID使用的是 insert_id 屬性。

      如果執(zhí)行的是 SELECT 語(yǔ)句,那么 query() 返回的就是一個(gè) mysqli_result 對(duì)象,它代表從一個(gè)數(shù)據(jù)庫(kù)查詢中獲取的結(jié)果集。關(guān)于這個(gè)對(duì)象的內(nèi)容我們將在后面的文章中進(jìn)行詳細(xì)的說(shuō)明。

      執(zhí)行多條 SQL 語(yǔ)句

      執(zhí)行多條 SQL 語(yǔ)句的能力對(duì)于 PDO 來(lái)說(shuō)是無(wú)法實(shí)現(xiàn)的,不過(guò)據(jù)說(shuō) PDO 是支持的,語(yǔ)句是可以正常執(zhí)行的,但是我們拿不到完整的返回結(jié)果。

      $sql = "insert into zyblog_test_user(username, password, salt) values('3bb', '3bb', '3bb');"         . "update zyblog_test_user set password='3aa' where username='3a';"         . "select * from zyblog_test_user where username='3b';"         . "select now()";  $pdo = new PDO("mysql:dns=locahost;dbname=blog_test", 'root', '', [PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION]); $res = $pdo->exec($sql); var_dump($res); // int(1) $stmt = $pdo->query($sql); foreach ($stmt as $row) { //PHP Fatal error:  Uncaught PDOException: SQLSTATE[HY000]: General error in     var_dump($row); }

      從代碼中可以看出,如果使用的是 exec() 方法,那么返回的就是 INSERT 語(yǔ)句的結(jié)果。如果使用 query() 方法,返回的雖然是 PDOStatement 對(duì)象,但是它是無(wú)法遍歷的。

      接下來(lái)我們就看看 MySQLi 是如何來(lái)執(zhí)行這個(gè)多條語(yǔ)句拼接在一起的 SQL 語(yǔ)句的。

      $mysqli->multi_query($sql); $i = 1; do{     echo '第' . $i . '條:', PHP_EOL;     $i++;     $result = $mysqli->use_result();     var_dump($result);     var_dump($mysqli->affected_rows);     if(is_object($result)){         var_dump($result->fetch_assoc());     }     var_dump($mysqli->next_result());     echo '========', PHP_EOL; } while($mysqli->more_results() ); // 第1條: // bool(false) // int(1) // ======== // 第2條: // bool(false) // int(0) // ======== // 第3條: // object(mysqli_result)#2 (5) { //   ["current_field"]=> //   int(0) //   ["field_count"]=> //   int(4) //   ["lengths"]=> //   NULL //   ["num_rows"]=> //   int(0) //   ["type"]=> //   int(1) // } // int(-1) // array(4) { //   ["id"]=> //   string(2) "67" //   ["username"]=> //   string(2) "3b" //   ["password"]=> //   string(2) "3b" //   ["salt"]=> //   string(2) "3b" // } // ======== // 第4條: // bool(false) // int(0) // ========

      multi_query() 就是 MySQLi 提供的執(zhí)行多條 SQL 語(yǔ)句的方法。通過(guò)它執(zhí)行之后,返回的結(jié)果是一個(gè)布爾值,如果第一條語(yǔ)句就有問(wèn)題的話,那么它返回的就是 FALSE 。如果是后面的語(yǔ)句錯(cuò)誤了,我們需要調(diào)用 next_result() 才能獲取后面語(yǔ)句的錯(cuò)誤信息。

      其實(shí)這也引出了我們 next_result() 這個(gè)方法的作用。它就相當(dāng)于是為執(zhí)行獲取下一個(gè)結(jié)果的操作做準(zhǔn)備,也可以看作是將游標(biāo)移動(dòng)到了下一條 SQL 語(yǔ)句上。而 more_results() 方法就是判斷是否還有

      贊(1)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)