CakeFest 2024: The Official CakePHP Conference

Interface dupla, procedural e orientada a objetos

A extensão mysqli possibilita uma dupla interface. Ela suporta o paradigma de programação procedural e orientada a objetos.

Usuários que estão migrando da extensão antiga mysql podem preferir a interface procedural. Esta interface é similar àquela da extensão antiga mysql. Em muitos casos, os nomes das funções diferem apenas pelo prefixo. Algumas funções mysqli levam um manipulador de conexão como seu primeiro argumento, enquanto as funções análogas na antiga interface mysql levam este manipulador como o último argumento, opcional.

Exemplo #1 Migração fácil da antiga extensão mysql

<?php
$mysqli
= mysqli_connect("example.com", "user", "password", "database");
$result = mysqli_query($mysqli, "SELECT 'Por favor não use a extensão mysql defasada para novos desenvolvimentos. ' AS _msg FROM DUAL");
$row = mysqli_fetch_assoc($result);
echo
$row['_msg'];

$mysql = mysql_connect("example.com", "user", "password");
mysql_select_db("test");
$result = mysql_query("SELECT 'Use a extensão mysqli em seu lugar.' AS _msg FROM DUAL", $mysql);
$row = mysql_fetch_assoc($result);
echo
$row['_msg'];

O exemplo acima produzirá:

Por favor não use a extensão mysql defasada para novos desenvolvimentos. Use a extensão mysqli em seu lugar.

A interface orientada a objetos

Em adição à clássica interface procedural, usuários podem escolher usar a interface orientada a objetos. A documentação está organizada utilizando a interface orientada a objetos. Ela mostra funções agrupadas por propósito, tornando a iniciação mais fácil. A seção de referência dá exemplos para ambas as variantes de sintaxe.

Não há diferenças significativas de desempenho entre as duas interfaces. Usuários podem basear suas escolhas em preferências pessoais.

Exemplo #2 Interface orientada a objeto e procedural

<?php

$mysqli
= mysqli_connect("example.com", "user", "password", "database");

$result = mysqli_query($mysqli, "SELECT 'Um mundo cheio de ' AS _msg FROM DUAL");
$row = mysqli_fetch_assoc($result);
echo
$row['_msg'];

$mysqli = new mysqli("example.com", "user", "password", "database");

$result = $mysqli->query("SELECT 'escolhas para agradar a todos.' AS _msg FROM DUAL");
$row = $result->fetch_assoc();
echo
$row['_msg'];

O exemplo acima produzirá:

Um mundo cheio de escolhas para agradar a todos.

A interface orientada a objetos é usada neste guia porque a seção de referência está organizada dessa forma.

Misturando estilos

É possível trocar de estilos a qualquer momento. Misturar ambos os estilos não é recomendado por questões de clareza e estilo de código.

Exemplo #3 Estilo de código ruim

<?php

$mysqli
= new mysqli("example.com", "user", "password", "database");

$result = mysqli_query($mysqli, "SELECT 'Estilo possível, porém, ruim.' AS _msg FROM DUAL");

if (
$row = $result->fetch_assoc()) {
echo
$row['_msg'];
}

O exemplo acima produzirá:

Estilo possível, porém, ruim.

Veja também

add a note

User Contributed Notes 1 note

up
29
Anonymous
9 years ago
Just want to add that both procedural mysqli_connect_errno and mysqli_connect_error DON'T accept any arguments!
http://php.net/manual/de/mysqli.connect-errno.php
http://php.net/manual/de/mysqli.connect-error.php
"int mysqli_connect_errno ( void )"
"string mysqli_connect_error ( void )"
It clearly states "void" there.

Adding the mysqli-Instance as a parameter makes it look like it pulls the error-number out of the provided instance, which is not actually happening. This could end in a hard to detect bug when connecting to multiple SQL servers.
And it is confusing for beginners.
To Top