PHP Unconference Europe 2015

Interface procédurale et orientée objet

L'extension mysqli fournit 2 interfaces. Elle supporte la programmation procédurale mais aussi, la programmation orientée objet.

Les utilisateurs migrants depuis l'ancienne extension mysql préfèreront l'interface procédurale. Cette interface est similaire à celle utilisée par l'ancienne extension mysql. Dans la plupart des cas, les noms de fonctions ne diffèrent que par leurs préfixes. Quelques fonctions mysqli prennent un gestionnaire de connexion comme premier argument, alors que la fonction correspondante de l'ancienne interface mysql le prennait comme argument optionnel en dernière position.

Exemple #1 Migration facile depuis l'ancienne extension mysql

<?php
$mysqli 
mysqli_connect("example.com""user""password""database");
$res mysqli_query($mysqli"SELECT 'Please, do not use ' AS _msg FROM DUAL");
$row mysqli_fetch_assoc($res);
echo 
$row['_msg'];

$mysql mysql_connect("example.com""user""password"); 
mysql_select_db("test");
$res mysql_query("SELECT 'the mysql extension for new developments.' AS _msg FROM DUAL"$mysql);
$row mysql_fetch_assoc($res);
echo 
$row['_msg'];
?>

L'exemple ci-dessus va afficher :

Please, do not use the mysql extension for new developments.

L'interface orientée objet

En plus de l'interface procédurale, les utilisateurs peuvent choisir d'utiliser l'interface orientée objet. La documentation est organisée en utilisant cette interface. Elle montre les fonctions groupées par leurs buts, rendant simple le démarrage de la programmation. La section référence fournit des exemples sur les deux syntaxes.

Il n'y a pas de différence significative d'un point de vue performance entre les deux interfaces. Les utilisateurs peuvent faire leur choix que d'un point de vue personnel.

Exemple #2 Interface procédurale et orientée objet

<?php
$mysqli 
mysqli_connect("example.com""user""password""database");
if (
mysqli_connect_errno($mysqli)) {
    echo 
"Echec lors de la connexion à MySQL : " mysqli_connect_error();
}

$res mysqli_query($mysqli"SELECT 'A world full of ' AS _msg FROM DUAL");
$row mysqli_fetch_assoc($res);
echo 
$row['_msg'];

$mysqli = new mysqli("example.com""user""password""database");
if (
$mysqli->connect_errno) {
    echo 
"Echec lors de la connexion à MySQL : " $mysqli->connect_error;
}

$res $mysqli->query("SELECT 'choices to please everybody.' AS _msg FROM DUAL");
$row $res->fetch_assoc();
echo 
$row['_msg'];
?>

L'exemple ci-dessus va afficher :

A world full of choices to please everybody.

L'interface orientée objet est utilisée dans le démarrage rapide de la documentation en raison du fait que la section référence est organisée de cette façon.

Mixage des styles

Il est possible de passer d'un style à un autre à tout moment bien que ce ne soit pas recommandé pour des raisons de clareté et de style de codage.

Exemple #3 Mauvais style de codage

<?php
$mysqli 
= new mysqli("example.com""user""password""database");
if (
$mysqli->connect_errno) {
    echo 
"Echec lors de la connexion à MySQL : " $mysqli->connect_error;
}

$res mysqli_query($mysqli"SELECT 'Possible but bad style.' AS _msg FROM DUAL");
if (!
$res) {
    echo 
"Echec lors de l'exécution de la requête : (" $mysqli->errno ") " $mysqli->error;
}

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

L'exemple ci-dessus va afficher :

Possible but bad style.

Voir aussi

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