ホームページ  >  記事  >  バックエンド開発  >  PHPを使用してmysqliデータベースを操作する方法

PHPを使用してmysqliデータベースを操作する方法

墨辰丷
墨辰丷オリジナル
2018-06-01 11:09:401682ブラウズ

この記事では主に PHP で mysqli データベースを操作する方法を紹介します。興味のある方はぜひ参考にしてください。

Mysql(i) サポートは php5.0 から追加され、新しい機能はオブジェクトの形式で追加されます

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 は libmysql.dll の代わりに mysqlnd を使用し始めました
mysqlnd は、zend 社によって開発された mysql データベース ドライバーで、オリジナルと比較してあらゆる面で改良されています

# mysqlnd でコンパイルします

./configure --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd 加上你的参数

mysqli プロセスとオブジェクト メソッドは両方とも、mysqli が提供する 3 つのクラスをサポートします:


1、mysqli と接続関連
2、MySQLi_Result 処理結果セット
3 、mysqli_stmt 前処理class

#Settings Character set
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();

一度に複数のステートメントを実行するマルチクエリ (非推奨) )

結果セットはありません。現時点では、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 を 1 回だけコンパイルすることを示します。

利点:

効率が高い。ステートメントが同じであるが、データが異なる状況では、SQLインジェクションの生成を防ぐことができます。

要約: 上記はこの記事の全内容です。Can Treat すべての学習が役立つことを願っています。 関連する推奨事項:

phpを使用して、1週間以内に自動ログイン保存メカニズムを実現します

PHPのユーザー検証とラベル推奨の簡単な使用方法

php

を使用してサーバーとWebを作成しますフロントエンドインターフェイス Interact

以上がPHPを使用してmysqliデータベースを操作する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。