Maison  >  Article  >  développement back-end  >  Collection de codes communs PHP MySQLi

Collection de codes communs PHP MySQLi

迷茫
迷茫original
2017-02-04 16:45:322437parcourir

À partir de PHP 5.0, vous pouvez non seulement utiliser les premières fonctions d'extension de base de données mysql, mais également utiliser la technologie mysqli nouvellement étendue pour communiquer avec la base de données mysql. L'extension mysqli de PHP est encapsulée dans une classe, qui est une technologie orientée objet. ne peut être utilisé que dans PHP5 et MYSQL4,1 ou versions supérieures, (i) indique qu'il doit être saisi, en utilisant mysqli, la vitesse d'exécution est plus rapide, plus pratique, plus efficace et peut également rendre l'accès à la base de données plus sûr (car la classe le mode est utilisé)

Processus simple utilisant MySQLi

Définir le fichier de configuration PHP.ini
extension=php_mysqli.dll

//Créer une connexion

$conn = new mysqli($servername, $username, $password, $dbname);

//Détecter la connexion

if ($conn->connect_error)  
{ 
  die("Connection failed: " . $conn->connect_error); 
}

//Obtenir la valeur de retour de la base de données

if($stmt=$con->prepare("SELECT username,password FROM member WHERE username=? AND password=?")) 
{ 
  $stmt->bind_param("ss",$username,$password); 
  $stmt->execute(); 
  $stmt->bind_result($U,$P); 
  $HasData=false; 
  while($stmt->fetch()) 
  { 
    $HasData=true; 
    echo "username->".$U." password->".$P."<br>"; 
  } 
}

//Ferme la connexion

$conn->close();

//Grammaire commune
INSERT INTO [nom de la table] ([champ 1],[champ 2]) VALUES ([valeur 1],[valeur 2]);
SELECT * FROM [nom de la table] WHERE [expression] ORDER BY [champ 1],[ASC/DESC haut/bas] [champ 2],[ASC/DESC haut/bas];
DELETE FROM [nom de la table] WHERE [expression];
UPDATE [nom de la table] SET [champ 1]=[valeur 1],[champ 2]=[valeur 2] WHERE [expression];
Obtenez le nombre total de lignes : SELECT COUNT(*) FROM [table]

//Caractères chinois tronqués

//针对页面 
header("Content-Type:text/html;charset=utf-8"); 
//针对数据库 
mysqli->query("SET CHARACTER SET 'utf8'");//读库  
mysqli->query("SET NAMES 'utf8'");//写库

Voici quelques exemples

Connectez-vous à MySQLi

Créer le fichier de configuration MYSQL config.ini.php

Le contenu de config.ini.php est le suivant :

<?php 
 $dbhost ="locallhost";
 $dbuser = "hehehe";
 $dbpwd = "123456";
 $dbname = "Student";
 $charName = "gbk2312"; 设置查询字符集gbk,gbk2312,utf-8
?>

(Utilisez mysqli pour vous connecter à la base de données MYSQL)

requery_once("config.ini.php");
$mysqliObj = new mysqli($dbhost,$dbuser,$dbpwd,$dbname);
if(mysqli_connect_errno()){
 echo "连接失败".mysqli_connect_error();
 exit();
}
$mysqliObj->query("set name $charName");

(Autres opérations)

Requête

(单条查询)
$sql = "drop table if exists user;";
$mysqliObj->query($sql);
  
(多条查询)
$musqliObj->multip_query($sql)
  
 
返回执行$sql受影响的行数()
  
if($mysqliObj->query($sql))
echo $mysqliObj->affected_rows;
  
insert 插入时,返回插入的id (很有用) 
 
 $num = $mysqliObj->insert_id;

Trois types de résultats de requête de traitement

$sql = "select * from user";
 $result = $mysqli->query($sql);
  
(1)fetch_row()  返回索引数组
fetch_row()
while(list($id,$name,$pwd)=$result->fetch_row()){
echo "id: ".$id." name:".$name." pwd:".$pwd."<br>";
  
}
(2)fetch_assoc() 返回关联数组
fetch_assoc()
while ($row = $result->fetch_assoc()){
 echo "id:".$row["userId"]." name:".$row["userName"]." pwd:".$row["password"]."<br>";
}
  
(3)fetch_object()返回对象
while($row = $result->fetch_object()){
echo "id:".$row->userId." name:".$row->uerName." pwd:".$row->password."<br>";
  
}

Les tableaux associatifs sont des tableaux imbriqués, tels que :

<?php
$data = array(
     array('name' => 'John Smith', 'home' => '555-555-5555',
        'cell' => '666-555-5555', 'email' => 'john@myexample.com'),
     array('name' => 'Jack Jones', 'home' => '777-555-5555',
        'cell' => '888-555-5555', 'email' => 'jack@myexample.com'),
     array('name' => 'Jane Munson', 'home' => '000-555-5555',
        'cell' => '123456', 'email' => 'jane@myexample.com')
    );
 
?>

Utilisez la classe mysqli_stmt

La version MySQL 4.1 a commencé à fournir un mécanisme de prétraitement (instruction préparée), qui peut envoyer l'intégralité de la commande au serveur MYSQL une seule fois. Seuls les paramètres changeront à l'avenir. MYSQL n'aura besoin d'analyser la commande qu'une seule fois, ce qui réduit considérablement le besoin. pour la transmission. La quantité de données améliore également l'efficacité du traitement des commandes (remarque, close() doit être fermé immédiatement lorsque la connexion n'est pas nécessaire)

Étapes :

1. Préparez les commandes SQL
$sql = "insérer dans les valeurs de l'utilisateur (nom, mot de passe) (?,?)";
$stms = $mysqli->prepare($sql);
2. Lier les données
$stms->bind_param('ss',$name,$pwd); (Note 'ss' : il doit correspondre aux variables suivantes ($name,$pwd)
à travers Type pâte ou flotteur
                                                                                                       s b Binaire (blob, chaîne d'octets binaire)
                                                                                                     )
$name = "huang";
$pwd = "123456";
3. Exécuter
$stms->execute();
[4. Exécutez un autre ensemble de données dans la liaison
$name = "il";
$pwd = "666666";
$stms->execute();
]
5. Fermez
$stmt->close();
$mysqli->close();

(Autres paramètres utiles)
$num = $stmt->affected_rows; Nombre de lignes affectées
$id = $stmt->insert_id; Lorsqu'il s'agit d'une commande d'insertion, renvoie l'identifiant de la ligne insérée (automatique)

事务处理

在默认情况下,MYSQL是以自动提交(autocommit)模式运行,这就意味着所执行的每一个语句都将立即写入数据库中,但如果使用事务安全的表格类型,是不希望自动提交的行为的
事务处理
当执行多条MYSQL命令时,当然希望当其中一条命令出错时,所有的命令都不执行,返回执行命令之前的状态
这就用到事务了
  
 简单运用事务流程
1.写好SQL命令
  $sql1 = "insert user(name) values('huang','123456')";
  $sql2 = "update account set number = number+1";
2.关闭MYSQL事务处理的自动提交模式
  $mysqli->cutocommit(0);
3.试执行命令 
  $success = true;
  $res1 = $mysqli->query($sql1);
  if(!$res1 or $mysqli->affected_rows !=1){
     $success = false;
  }
  $res2 = $mysqli->query($sql2);
  if(!$res2 or $mysqli->affected_rows !=1){
     $success = false;
  }
4.查看执行情况,都成功执行,有失败回滚初态
  if($success ){
     $mysqli->commit();
     echo "执行成功";
  }else{
     $mysqli->rollback();
     echo "执行失败";
  }
5.恢复MYSQL事务处理的自动提交模式
  $mysqli->cutocommit(1);
  $mysqli->close();
  
mysql 目前只有InnDB和BDB两种数据包类型才支持事务 
InnoDB最快
(创建InnDB类型表)

create table user(
id int(10) not null auto_increment,
name varchar(50) not null,
pwd varchar(50) not null,
primary key(id)
)type=InnoDB
Déclaration:
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