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