PHP Unconference Europe 2015

Dual procedural and object-oriented interface

La extensión mysqli ofrece una interfaz dual. Soporta el paradigme de programación procedimental y el orientado a objetos.

Los usuarios que migren desde la extensión mysql antigua pueden preferir la interfaz procedimental. Esta interfaz es similar a la de la extensión antigua de mysql. En la mayoría de los casos, los nombres de funciones difieren únicamente por el prefijo. Algunas funciones de mysqli toman como primer argumento un gestor de conexión, mientras que las funciones similares de la antigua interfaz de mysql lo toman como el último argumento opcional.

Ejemplo #1 Migración sencilla desde la antigua extensión mysql

<?php
$mysqli 
mysqli_connect("ejemplo.com""usuario""contraseña""basedatos");
$resultado mysqli_query($mysqli"SELECT 'Por favor, no use ' AS _msg FROM DUAL");
$fila mysqli_fetch_assoc($resultado);
echo 
$fila['_msg'];

$mysql mysql_connect("ejemplo.com""usuario""contraseña");
mysql_select_db("test");
$resultado mysql_query("SELECT 'la extensión mysql para nuevos desarrollos.' AS _msg FROM DUAL"$mysql);
$fila mysql_fetch_assoc($resultado);
echo 
$fila['_msg'];
?>

El resultado del ejemplo sería:

Por favor, no use la extensión mysql para nuevos desarrollos.

La interfaz orientada a objetos

Además de la clásica interfaz procedimental, los usuarios pueden optar por usar la interfaz orientada a objetos. La documentación está organizada según la interfaz orientada a objetos. Esta interfaz muestra las funciones agrupadas por su propósito, haciendo más fácil los comienzos. La sección de referencia proporciona ejemplos para ambas variantes de sintaxis.

No existen diferencias significativas de rendimiento entre las dos interfaces. Los usuarios puede basar su elección en sus preferencias personales.

Ejemplo #2 Interfaz orientada a objetos y procedimental

<?php
$mysqli 
mysqli_connect("ejemplo.com""usuario""contraseña""basedatos");
if (
mysqli_connect_errno($mysqli)) {
    echo 
"Fallo al contenctar a MySQL: " mysqli_connect_error();
}

$resultado mysqli_query($mysqli"SELECT 'Un mundo lleno de ' AS _msg FROM DUAL");
$fila mysqli_fetch_assoc($resultado);
echo 
$fila['_msg'];

$mysqli = new mysqli("ejemplo.com""usuario""contraseña""basedatos");
if (
$mysqli->connect_errno) {
    echo 
"Fallo al contenctar a MySQL: " $mysqli->connect_error;
}

$resultado $mysqli->query("SELECT 'elecciones para complacer a todos.' AS _msg FROM DUAL");
$fila $resultado->fetch_assoc();
echo 
$fila['_msg'];
?>

El resultado del ejemplo sería:

Un mundo lleno de elecciones para complacer a todos.

Se usa la interfaz orientada a objetos en el inicio rápido porque la sección de referencia está organizada de esta manera.

Mixing styles

Es posible cambiar entre los estilos en cualquier momento. No se recomienda mezclar los dos estilos por razones de claridad y estilo de código.

Ejemplo #3 Estilo de codificación malo

<?php
$mysqli 
= new mysqli("ejemplo.com""usuario""contraseña""basedatos");
if (
$mysqli->connect_errno) {
    echo 
"Fallo al contenctar a MySQL: " $mysqli->connect_error;
}

$resultado mysqli_query($mysqli"SELECT 'Estilo malo pero posible.' AS _msg FROM DUAL");
if (!
$resultado) {
    echo 
"Fallo al ejecutar la consulta: (" $mysqli->errno ") " $mysqli->error;
}

if (
$fila $resultado->fetch_assoc()) {
    echo 
$fila['_msg'];
}
?>

El resultado del ejemplo sería:

Estilo malo pero posible.

Véase también

add a note add a note

User Contributed Notes 1 note

up
0
Anonymous
1 year ago
After significant searching with no success finding a solution I was able to figure out the following to error 2005 where the connection could not find the host. While I am hosted on 1&1 I saw numerous posts with similar problems.

The solution turned out to be as follows:

<?php

$mysqli
= new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT, DB_UNIX_SOCKET);

I added the DB_PORT and DB_UNIX_SOCKET

/** name of the database. please note: database and database table are not the same thing! */
define("DB_NAME", "YOUR DB NAME");

/** user for your database. the user needs to have rights for SELECT, UPDATE, DELETE and INSERT.
/** By the way, it's bad style to use "root", but for development it will work */
define("DB_USER", "YOUR DB USER");

/** The password of the above user */
define("DB_PASS", "YOUR DB PWORD");

/** The unix socket for 1&1 dedicated */
define("DB_UNIX_SOCKET", "/tmp/mysql5.sock");

/** The db port, replace with yours */
define("DB_PORT", 3306);
?>
To Top