Comment utiliser PHP pour manipuler la base de données MySQLi

墨辰丷
Libérer: 2023-03-28 22:40:01
original
1742 Les gens l'ont consulté

Cet article présente principalement la méthode de manipulation de la base de données mysqli en PHP. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Le support de MySQL(i) a été ajouté depuis php5.0, et les nouvelles fonctions sont ajoutées sous forme d'objets

i signifie fonctions améliorées, haute efficacité et stabilité

Paramètres de compilation :

./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
Copier après la connexion

En raison de problèmes de droits d'auteur, à partir de php5.3, php utilisera mysqlnd au lieu de libmysql .dll
mysqlnd est un pilote de base de données mysql développé par la société zend, qui s'est amélioré dans tous les aspects par rapport à l'original

# Utilisez mysqlnd pour compiler

./configure --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd 加上你的参数
Copier après la connexion

Les méthodes processus et objet mysqli prennent toutes deux en charge

trois classes fournies par mysqli :

1. mysqli et la connexion
2. Ensemble de résultats de traitement MySQLi_Result
3. Classe de prétraitement mysqli_stmt

#Définir le jeu de caractères
set_charset

#Obtenir le jeu de caractères
character_set_name

Obtenir l'objet de base de données

//创建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');
Copier après la connexion

requête : renvoie false en cas d'échec, select renvoie l'objet du jeu de résultats avec succès, d'autres renvoie true, non-false, ce qui signifie que l'exécution SQL a réussi

Aucun exemple de jeu de résultats

$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);
Copier après la connexion

Il existe un ensemble de résultats

$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();
Copier après la connexion

Exécuter plusieurs instructions multirequêtes en même temps (non recommandé)

Aucun ensemble de résultats, pour le moment, affectées_rows ne peut obtenir que le numéro du dernier élément affecté

$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();
Copier après la connexion

Il existe un ensemble de résultats

$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();
Copier après la connexion

Traitement des transactions :

$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();
Copier après la connexion

mysqli_stmt : classe de prétraitement mysqli (recommandé) : Indique une instruction préparée Le serveur ne compile SQL qu'une seule fois

La même fonction peut être réalisée avec mysqli et mysqli_result

Avantages. : Haute efficacité, adapté aux situations où les instructions sont les mêmes mais les données sont différentes, et peut empêcher l'apparition d'une injection SQL

exemple mysqli_stmt : instruction non-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 = &#39;name&#39;;
  $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);
Copier après la connexion

exemple mysqli_stmt : sélectionnez l'instruction 1

require &#39;fns.php&#39;;

//创建mysqli对象方式 
$mysqli = @new mysqli(&#39;127.0.0.1&#39;, &#39;root&#39;, &#39;&#39;, &#39;test&#39;);

//只能用函数来判断是否连接成功
if(mysqli_connect_errno())
{
  echo mysqli_connect_error();
  die;
}

$mysqli->set_charset(&#39;utf8&#39;);

$sql = "select * from limove where id
Copier après la connexion

Résumé : ce qui précède représente tout le contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.

Recommandations associées :

Utilisez php pour réaliser un mécanisme de stockage automatique des connexions dans un délai d'une semaine

PHP Utilisation simple de la vérification des utilisateurs et de la recommandation de balises

Utilisez php pour interagir avec le serveur et l'interface frontale Web

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal