php操縱mysqli資料庫

来源:http://www.cnblogs.com/qizekai/archive/2016/09/18/5880396.html
-Advertisement-
Play Games

從php5.0開始增加mysql(i)支持 , 新加的功能都以對象的形式添加 i表示改進的意思 功能多、效率高、穩定 編譯時參數: ./configure --with-mysql=/usr/bin/mysql_config \ #使用 Mysql ClientLibrary(libmysql)構建 ...


從php5.0開始增加mysql(i)支持 , 新加的功能都以對象的形式添加

i表示改進的意思 功能多、效率高、穩定

編譯時參數:

./configure --with-mysql=/usr/bin/mysql_config \ #使用 Mysql ClientLibrary(libmysql)構建
--with-mysqli=mysqlnd \ #使用 Mysql Native Dirver 即mysqlnd
--with-pdo-mysql=mysqlnd #使用 Mysql Native Dirver 即mysqlnd

由於版權問題 從 php5.3開始 php開始用 mysqlnd 替代 libmysql.dll 
mysqlnd 是zend公司開發的mysql資料庫驅動,相比原來各方面都有所提高

#使用mysqlnd編譯

./configure --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd 加上你的參數

mysqli 過程、對象方式都支持

mysqli提供的三個類:
   1、mysqli 和連接相關的
   2、MySQLi_Result 處理結果集
   3、mysqli_stmt 預處理類

#設置字元集
set_charset

#獲取字元集
character_set_name

獲取資料庫對象

複製代碼
//創建mysqli對象方式 1
//屏蔽連接產生的錯誤
$mysqli = new mysqli('127.0.0.1', 'root', '', 'test');

//只能用函數來判斷是否連接成功
if(mysqli_connect_errno())
{
    echo mysqli_connect_error();
}

//創建mysqli對象方式 2 可以設置一些參數
$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//設置超時時間
$mysqli->real_connect('127.0.0.1', 'root', '', 'test'); 
複製代碼

query:失敗返回false,select成功返回結果集對象,其他返回true 非false,意味著sql執行成功了

無結果集示例

複製代碼
$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//設置超時時間
$mysqli->real_connect('127.0.0.1', 'root', '', 'test');

$sql = "insert into limove(`name`, `order`) values('aa', 11)";
$rst = $mysqli->query($sql);

$sql = "delete from limove where id = 221";
$rst = $mysqli->query($sql);

if($rst === false)
{
    ee($mysqli->errno);
    ee($mysqli->error);
}

#影響條數
ee($mysqli->affected_rows);
#插入的id
ee($mysqli->insert_id);

ee($mysqli);
複製代碼

 

有結果集

 

複製代碼
$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//設置超時時間
$mysqli->real_connect('127.0.0.1', 'root', '', 'test');

$sql = "select * from limove as limove_as";

$result = $mysqli->query($sql);
if($result === false)
{
    ee($mysqli->errno);
    ee($mysqli->error);
}

#行數
ee($result->num_rows);

#列數
ee($result->field_count);

#欄位個數
ee($result->field_count);

#獲取所有欄位的信息
$field_arr = $result->fetch_fields();

#移動欄位的指針
// $result->field_seek(1);

#依次獲取欄位的信息
while($field = $result->fetch_field())
{
    ee($field);
}

#移動記錄指針
$result->data_seek(1);

#一次獲取所有數據
$data = $result->fetch_all(MYSQLI_ASSOC);

#關聯數組方式獲取結果集
$data = array();

$result->data_seek(0); #重置指針到起始
while($row = $result->fetch_assoc())
{
    $data[] = $row;
}

ee($data);


$result->free();
$mysqli->close();
複製代碼

一次 執行多條語句 multiquery (不推薦使用)

  無結果集,此時 affected_rows 只能獲取到最後的那條影響的條數

複製代碼
$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//設置超時時間
$mysqli->real_connect('127.0.0.1', 'root', '', 'test');


$sql_arr = array(
    'insert into limove(id,`name`, `order`) values(null, 1, 2)',        
    'insert into limove(id,`name`, `order`) values(null, 1, 222)',        
    'delete from limove where `order` = 2',        
);

$sql = implode(';', $sql_arr);

$result = $mysqli->multi_query($sql);
if($result === false)
{
    ee($mysqli->errno);
    ee($mysqli->error);
}

$mysqli->close();
複製代碼

 

有結果集

複製代碼
$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//設置超時時間
$mysqli->real_connect('127.0.0.1', 'root', '', 'test');

$sql_arr = array(
    'show tables',        
    'desc select * from limove',        
    'show create table limove',        
);

$sql = implode(';', $sql_arr);

$rst = $mysqli->multi_query($sql);

if($rst === false)
{
    ee($mysqli->errno);
    ee($mysqli->error);
}

do{
    $result = $mysqli->store_result();#獲取當前游標所在的結果集
    
    $data = $result->fetch_all();
    
    ee($data);
    
}while($mysqli->next_result());#游標移動到下一個結果集

$mysqli->close();
複製代碼

 

事務處理:

複製代碼
    $mysqli=new mysqli("localhost", "root", "123456", "xsphpdb");

    //事務處理
    $mysqli->autocommit(0);

    $error=true;

    $price=50;

    $sql="update zh set ye=ye-{$price} where name='zhangsan'";
    
    $result=$mysqli->query($sql);

    if(!$result){
        $error=false;
        echo "從張三轉出失敗
"; }else{ if($mysqli->affected_rows==0){ $error=false; echo "張三的錢沒有變化"; }else{ echo "從張三賬號中轉出成功!
"; } } $sql="update zh set ye=ye+{$price} where name='lisi1'"; $result=$mysqli->query($sql); if(!$result){ $error=false; echo "從李四轉入失敗
"; }else{ if($mysqli->affected_rows==0){ $error=false; echo "李四的錢沒有變化"; }else{ echo "向李四賬號中轉入成功!
"; } } if($error){ echo "轉賬成功!"; $mysqli->commit(); }else{ echo "轉賬失敗!"; $mysqli->rollback(); } $mysqli->autocommit(1); $mysqli->close();
複製代碼

 

mysqli_stmt:mysqli預處理類(推薦):表示了準備好的一個語句,伺服器端只編譯一次sql
用mysqli和mysqli_result可以實現同樣的功能
優點:效率高,適用於語句相同只是數據不同的情況 ,可以阻止sql註入的產生

 

 mysqli_stmt示例:非select語句

複製代碼
require  'fns.php';

//創建mysqli對象方式 
$mysqli = @new mysqli('127.0.0.1', 'root', '', 'test');

//只能用函數來判斷是否連接成功
if(mysqli_connect_errno())
{
    echo mysqli_connect_error();
    die;
}

$mysqli->set_charset('utf8');

$sql = "insert into limove values(?, ?, ?)"; //語句一樣值不相同情況



//mysqli中有直接的方法可用
$stmt = $mysqli->prepare($sql);

//綁定參數
$stmt->bind_param('iss', $id, $name, $order);

for($i=0;$i<5;$i++){
    $id = 0;
    $name = 'name';
    $order = mt_rand(1, 1000);
    $stmt->execute();

}

//最後id
ee($stmt->insert_id);

//影響的行數 註:最後一條執行的
ee($stmt->affected_rows);

//錯誤號
ee($stmt->errno);

//錯誤信息
ee($stmt->error);

//stmt對象中可以看到更多的信息
ee($stmt);

eee($mysqli);
複製代碼

 

  mysqli_stmt示例:select語句 1 

複製代碼
require  'fns.php';

//創建mysqli對象方式 
$mysqli = @new mysqli('127.0.0.1', 'root', '', 'test');

//只能用函數來判斷是否連接成功
if(mysqli_connect_errno())
{
    echo mysqli_connect_error();
    die;
}

$mysqli->set_charset('utf8');

$sql = "select * from limove where id							
		

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 題目要求:用戶隨機輸入字母及數字組成的字元串,當用戶連續輸入字元串‘hello’時,程式結束用戶輸入,並分別顯示用戶輸入的字母及數字的數目。 代碼: 題目解析:首先這道題目要求用戶輸入字元串”hello“時結束輸入,不如分別判斷這五個字母,其次需要程式自動結束輸入,我們就需要用Console.Rea ...
  • 1.VirtrualBox安裝Centos6.8 minimal VirtrualBox新建個虛擬機配置好記憶體以及硬碟大小,安裝即可; 網路方式是 NAT(預設)和橋接方式來實現,最好在安裝前設置好,NAT主要是連外網,橋接可通過區域網IP訪問; 設置-網路-網卡1(NAT)預設已經設置好了,再點開 ...
  • 一年之前,我做夢也想不到會來這裡寫技術總結。誤打誤撞來到了上海西南某高校,成為了文科專業的工科男,現在每天除了膜ha,就是惡補CS。導師是做計算語言學的,所以當務之急就是先自學電腦自然語言處理,打好底子準備做科研(認真臉)。 進入正題,從圖書館找了本“Natural Language Proces ...
  • More is better Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 327680/102400 K (Java/Others)Total Submission(s): 24825 Accepted Submission(s): 89 ...
  • 一、SpringAOP: ⒈AOP:Aspect Oriented Programming 面向切麵編程, 實現的是核心業務和非核心業務之間的的分離,讓核心類只做核心業務,代理類只做非核心業務。 ⒉目的: ⑴、把核心業務和非核心業務進行分離 ⑵、把多個非核心業務處理(點)變成一個切麵(之前的非核心業 ...
  • cd命令是linux實際使用當中另一個非常重要的命令,本文就為大家介紹下Linux中cd命令的用法。 更多Linux命令詳情請看:Linux命令速查手冊 Linux cd命令用於切換當前工作目錄至 dirName(目錄參數)。 其中 dirName 表示法可為絕對路徑或相對路徑。若目錄名稱省略,則變 ...
  • 在我們安裝PHP模塊時,有時需要註意PHP編譯的版本,下麵講解下PHP中VC6、VC9、TS、NTS版本的區別與用法詳解,介紹php的兩種執行方式。 1. VC6與VC9的區別:VC6版本是使用Visual Studio 6編譯器編譯的,如果你的PHP是用Apache來架設的,那你就選擇VC6版本。 ...
  • \_\_init\_\_.py 文件的作用是將文件夾變為一個Python模塊,Python 中的每個模塊的包中,都有\_\_init\_\_.py 文件。 通常\_\_init\_\_.py 文件為空,但是我們還可以為它增加其他的功能。我們在導入一個包時,實際上是導入了它的\_\_init\_\_. ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...