English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Implementación de la manipulación de bases de datos mysqli con php

Desde php5Desde la versión 0.0, se ha añadido soporte para mysql(i), y todas las nuevas características se han añadido en forma de objeto

i significa mejorar, características más ricas, eficiencia alta, estable

Parámetros de compilación:

./configure --with-mysql=/usr/bin/mysql_config \ #Usar Mysql ClientLibrary (libmysql) para construir
--with-mysqli=mysqlnd \ #Usar Mysql Native Dirver, es decir, mysqlnd
--with-pdo-mysql=mysqlnd #Usar Mysql Native Dirver, es decir, mysqlnd

Debido a problemas de derechos de autor desde php5.3Comienzo php comenzando a usar mysqlnd en lugar de libmysql.dll 
mysqlnd es un controlador de base de datos mysql desarrollado por la empresa zend, que en varios aspectos ha mejorado en comparación con el original

#Compilar con mysqlnd

./configure --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd más tus parámetros

El proceso mysqli y el modo de objeto son compatibles

Las tres clases proporcionadas por mysqli:

1、mysqli y relacionado con la conexión
2、MySQLi_Result para manejar los conjuntos de resultados
3、clase de preprocesamiento mysqli_stmt

#Configurar el conjunto de caracteres
set_charset

#Obtener el conjunto de caracteres
character_set_name

Obtener el objeto de la base de datos

//Manera de crear objetos mysqli 1
//Ocultar errores generados por la conexión
$mysqli = new mysqli('127.0.0.1', 'root', '', 'test');
//sólo se puede determinar si se ha conectado con éxito utilizando la función
if(mysqli_connect_errno())
{
  echo mysqli_connect_error();
}
//Manera de crear objetos mysqli 2 Puede configurar algunos parámetros
$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//Configurar tiempo de espera
$mysqli->real_connect('127.0.0.1', 'root', '', 'test'); 

query: Devuelve false si falla, devuelve el objeto de conjunto de resultados de select si tiene éxito, otros devuelven true no false, lo que significa que la ejecución de sql tuvo éxito

Ejemplo sin conjunto de resultados

$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//Configurar tiempo de espera
$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);
}
#Número de filas afectadas
ee($mysqli->affected_rows);
#ID insertado
ee($mysqli->insert_id);
ee($mysqli);

Hay un conjunto de resultados

$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//Configurar tiempo de espera
$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);
}
#Número de filas
ee($result->num_rows);
#Número de columnas
ee($result->field_count);
#Número de campos
ee($result->field_count);
#Obtener toda la información de los campos
$field_arr = $result->fetch_fields();
#Mover el puntero del campo
// $result->field_seek(1);
#Obtener información de los campos de manera sucesiva
while($field = $result->fetch_field())
{
  ee($field);
}
#Mover el puntero del registro
$result->data_seek(1);
#Obtener todos los datos a la vez
$data = $result->fetch_all(MYSQLI_ASSOC);
#Obtener el conjunto de resultados de manera de asociación de arrays
$data = array();
$result->data_seek(0); #Reiniciar el puntero al inicio
while($row = $result->fetch_assoc())
{
  $data[] = $row;
}
ee($data);
$result->free();
$mysqli->close();

Ejecutar múltiples consultas a la vez multiquery (no se recomienda su uso)

No hay conjunto de resultados, en este momento affected_rows solo puede obtener la última cantidad de filas afectadas

$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//Configurar tiempo de espera
$mysqli->real_connect('127.0.0.1', 'root', '', 'test');
$sql_arr = array(
   1, 2)    
   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();

Hay un conjunto de resultados

$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//Configurar tiempo de espera
$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();#obtener el conjunto de resultados en la posición del cursor actual
  $data = $result->fetch_all();
  ee($data);
}while($mysqli->next_result());#mover el cursor al siguiente conjunto de resultados
$mysqli->close();

manejo de transacciones:

$mysqli=new mysqli("localhost", "root", "123456", "xsphpdb");
  //manejo de transacciones
  $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 "¡Falló la transferencia desde Zhang San!"
";
  }else{
    if($mysqli->affected_rows==0){
      $error=false;
      echo "El dinero de Zhang San no ha cambiado";  
    }else{
      echo "¡Transferencia exitosa desde la cuenta de Zhang San!"
";
    }
  }
  $sql="update zh set ye=ye+{$price} where name='lisi1'";
  $result=$mysqli->query($sql);
  if(!$result){
    $error=false;
    echo "¡Falló la transferencia desde Li Si!"
";
  }else{
    if($mysqli->affected_rows==0){
      $error=false;
      echo "El dinero de Li Si no ha cambiado";  
    }else{
      echo "¡Ingresado con éxito en la cuenta de Li Si!"
";
    }
  }
  if($error){
    echo "¡Transferencia exitosa!";
    $mysqli->commit();
  }else{
    echo "¡Transferencia fallida!";
    $mysqli->rollback();
  }
  $mysqli->autocommit(1);
  $mysqli->close();

mysqli_stmt: clase de preparación de mysqli (recomendado): representa una sentencia preparada, el servidor compila una vez el sql

mysqli y mysqli_result pueden lograr la misma función

ventajas:altamente eficiente, adecuado para situaciones donde las sentencias son iguales pero los datos son diferentes, puede evitar la的产生 de inyección de sql

ejemplo de mysqli_stmt: no es una sentencia select

require 'fns.php';
//Manera de crear objetos mysqli 
$mysqli = @new mysqli('127.0.0.1', 'root', '', 'test');
//sólo se puede determinar si se ha conectado con éxito utilizando la función
if(mysqli_connect_errno())
{
  echo mysqli_connect_error();
  die;
}
$mysqli->set_charset('utf8);
$sql = "insert into limove values(?, ?, ?"; //El caso en que la oración es la misma pero los valores son diferentes
//En mysqli hay métodos directos disponibles
$stmt = $mysqli->prepare($sql);
//Enlazar parámetros
$stmt->bind_param('iss', $id, $name, $order);
for($i=0;$i<5;$i++{
  $id = 0;
  $name = 'name';
  $order = mt_rand(1, 1000);
  $stmt->execute();
}
//Último id
ee($stmt->insert_id);
//Número de filas afectadas Nota: La última ejecución
ee($stmt->affected_rows);
//Número de error
ee($stmt->errno);
//Mensajes de error
ee($stmt->error);
//En el objeto stmt se pueden ver más informaciónes
ee($stmt);
eee($mysqli);

Ejemplo de mysqli_stmt: select statement 1 

require 'fns.php';
//Manera de crear objetos mysqli 
$mysqli = @new mysqli('127.0.0.1', 'root', '', 'test');
//sólo se puede determinar si se ha conectado con éxito utilizando la función
if(mysqli_connect_errno())
{
  echo mysqli_connect_error();
  die;
}
$mysqli->set_charset('utf8);
$sql = "select * from limove where id

La implementación de la manipulación de la base de datos mysqli en PHP que he compartido con ustedes es todo lo que hay. Espero que les sirva de referencia y que apoyen más al tutorial de alarido.

Te gustará