2723 votes

Pourquoi ne devrais-je pas utiliser les fonctions mysql_* en PHP ?

Quelles sont les raisons techniques pour lesquelles on ne devrait pas utiliser mysql_* fonctions ? (par exemple mysql_query() , mysql_connect() o mysql_real_escape_string() )?

Pourquoi devrais-je utiliser autre chose, même si cela fonctionne sur mon site ?

S'ils ne fonctionnent pas sur mon site, pourquoi j'obtiens des erreurs telles que

Attention : mysql_connect() : Aucun fichier ou répertoire de ce type

3 votes

L'erreur doit être comme : Erreur fatale : Unecaught Error : Appel à une fonction non définie mysql_connect() ...

48 votes

Le fait qu'ils soient dépréciés est une raison suffisante pour les éviter.

24voto

Ani Menon Points 5876

Je trouve les réponses ci-dessus très longues, donc pour résumer :

L'extension mysqli possède un certain nombre de avantages, les principales améliorations par rapport l'extension mysql sont les suivantes :

  • Interface orientée objet
  • Soutien aux déclarations préparées
  • Prise en charge des déclarations multiples
  • Soutien aux transactions
  • Amélioration des capacités de débogage
  • Support des serveurs embarqués

Source : Aperçu de MySQLi


Comme expliqué dans les réponses ci-dessus, les alternatives à mysql sont mysqli et PDO (PHP Data Objects).

  • L'API prend en charge les Prepared Statements côté serveur : Supporté par MYSQLi et PDO
  • L'API prend en charge les Prepared Statements côté client : Supporté uniquement par PDO
  • L'API prend en charge les procédures stockées : MySQLi et PDO
  • L'API prend en charge les déclarations multiples et toutes les fonctionnalités de MySQL 4.1+. Elle est prise en charge par MySQLi et surtout par PDO.

MySQLi et PDO ont été introduits dans PHP 5.0, alors que MySQL a été introduit avant PHP 3.0. Il est à noter que MySQL est inclus dans PHP5.x, bien que déprécié dans les versions ultérieures.

10voto

Pavel Tzonkov Points 227

Il est possible de définir presque tous les mysql_* en utilisant mysqli ou PDO. Il suffit de les inclure au-dessus de votre ancienne application PHP pour qu'elle fonctionne en PHP7. Ma solution aquí .

<?php

define('MYSQL_LINK', 'dbl');
$GLOBALS[MYSQL_LINK] = null;

function mysql_link($link=null) {
    return ($link === null) ? $GLOBALS[MYSQL_LINK] : $link;
}

function mysql_connect($host, $user, $pass) {
    $GLOBALS[MYSQL_LINK] = mysqli_connect($host, $user, $pass);
    return $GLOBALS[MYSQL_LINK];
}

function mysql_pconnect($host, $user, $pass) {
    return mysql_connect($host, $user, $pass);
}

function mysql_select_db($db, $link=null) {
    $link = mysql_link($link);
    return mysqli_select_db($link, $db);
}

function mysql_close($link=null) {
    $link = mysql_link($link);
    return mysqli_close($link);
}

function mysql_error($link=null) {
    $link = mysql_link($link);
    return mysqli_error($link);
}

function mysql_errno($link=null) {
    $link = mysql_link($link);
    return mysqli_errno($link);
}

function mysql_ping($link=null) {
    $link = mysql_link($link);
    return mysqli_ping($link);
}

function mysql_stat($link=null) {
    $link = mysql_link($link);
    return mysqli_stat($link);
}

function mysql_affected_rows($link=null) {
    $link = mysql_link($link);
    return mysqli_affected_rows($link);
}

function mysql_client_encoding($link=null) {
    $link = mysql_link($link);
    return mysqli_character_set_name($link);
}

function mysql_thread_id($link=null) {
    $link = mysql_link($link);
    return mysqli_thread_id($link);
}

function mysql_escape_string($string) {
    return mysql_real_escape_string($string);
}

function mysql_real_escape_string($string, $link=null) {
    $link = mysql_link($link);
    return mysqli_real_escape_string($link, $string);
}

function mysql_query($sql, $link=null) {
    $link = mysql_link($link);
    return mysqli_query($link, $sql);
}

function mysql_unbuffered_query($sql, $link=null) {
    $link = mysql_link($link);
    return mysqli_query($link, $sql, MYSQLI_USE_RESULT);
}

function mysql_set_charset($charset, $link=null){
    $link = mysql_link($link);
    return mysqli_set_charset($link, $charset);
}

function mysql_get_host_info($link=null) {
    $link = mysql_link($link);
    return mysqli_get_host_info($link);
}

function mysql_get_proto_info($link=null) {
    $link = mysql_link($link);
    return mysqli_get_proto_info($link);
}
function mysql_get_server_info($link=null) {
    $link = mysql_link($link);
    return mysqli_get_server_info($link);
}

function mysql_info($link=null) {
    $link = mysql_link($link);
    return mysqli_info($link);
}

function mysql_get_client_info() {
    $link = mysql_link();
    return mysqli_get_client_info($link);
}

function mysql_create_db($db, $link=null) {
    $link = mysql_link($link);
    $db = str_replace('`', '', mysqli_real_escape_string($link, $db));
    return mysqli_query($link, "CREATE DATABASE `$db`");
}

function mysql_drop_db($db, $link=null) {
    $link = mysql_link($link);
    $db = str_replace('`', '', mysqli_real_escape_string($link, $db));
    return mysqli_query($link, "DROP DATABASE `$db`");
}

function mysql_list_dbs($link=null) {
    $link = mysql_link($link);
    return mysqli_query($link, "SHOW DATABASES");
}

function mysql_list_fields($db, $table, $link=null) {
    $link = mysql_link($link);
    $db = str_replace('`', '', mysqli_real_escape_string($link, $db));
    $table = str_replace('`', '', mysqli_real_escape_string($link, $table));
    return mysqli_query($link, "SHOW COLUMNS FROM `$db`.`$table`");
}

function mysql_list_tables($db, $link=null) {
    $link = mysql_link($link);
    $db = str_replace('`', '', mysqli_real_escape_string($link, $db));
    return mysqli_query($link, "SHOW TABLES FROM `$db`");
}

function mysql_db_query($db, $sql, $link=null) {
    $link = mysql_link($link);
    mysqli_select_db($link, $db);
    return mysqli_query($link, $sql);
}

function mysql_fetch_row($qlink) {
    return mysqli_fetch_row($qlink);
}

function mysql_fetch_assoc($qlink) {
    return mysqli_fetch_assoc($qlink);
}

function mysql_fetch_array($qlink, $result=MYSQLI_BOTH) {
    return mysqli_fetch_array($qlink, $result);
}

function mysql_fetch_lengths($qlink) {
    return mysqli_fetch_lengths($qlink);
}

function mysql_insert_id($qlink) {
    return mysqli_insert_id($qlink);
}

function mysql_num_rows($qlink) {
    return mysqli_num_rows($qlink);
}

function mysql_num_fields($qlink) {
    return mysqli_num_fields($qlink);
}

function mysql_data_seek($qlink, $row) {
    return mysqli_data_seek($qlink, $row);
}

function mysql_field_seek($qlink, $offset) {
    return mysqli_field_seek($qlink, $offset);
}

function mysql_fetch_object($qlink, $class="stdClass", array $params=null) {
    return ($params === null)
        ? mysqli_fetch_object($qlink, $class)
        : mysqli_fetch_object($qlink, $class, $params);
}

function mysql_db_name($qlink, $row, $field='Database') {
    mysqli_data_seek($qlink, $row);
    $db = mysqli_fetch_assoc($qlink);
    return $db[$field];
}

function mysql_fetch_field($qlink, $offset=null) {
    if ($offset !== null)
        mysqli_field_seek($qlink, $offset);
    return mysqli_fetch_field($qlink);
}

function mysql_result($qlink, $offset, $field=0) {
    if ($offset !== null)
        mysqli_field_seek($qlink, $offset);
    $row = mysqli_fetch_array($qlink);
    return (!is_array($row) || !isset($row[$field]))
        ? false
        : $row[$field];
}

function mysql_field_len($qlink, $offset) {
    $field = mysqli_fetch_field_direct($qlink, $offset);
    return is_object($field) ? $field->length : false;
}

function mysql_field_name($qlink, $offset) {
    $field = mysqli_fetch_field_direct($qlink, $offset);
    if (!is_object($field))
        return false;
    return empty($field->orgname) ? $field->name : $field->orgname;
}

function mysql_field_table($qlink, $offset) {
    $field = mysqli_fetch_field_direct($qlink, $offset);
    if (!is_object($field))
        return false;
    return empty($field->orgtable) ? $field->table : $field->orgtable;
}

function mysql_field_type($qlink, $offset) {
    $field = mysqli_fetch_field_direct($qlink, $offset);
    return is_object($field) ? $field->type : false;
}

function mysql_free_result($qlink) {
    try {
        mysqli_free_result($qlink);
    } catch (Exception $e) {
        return false;
    }
    return true;
}

0voto

MuhammadAliDEV Points 111

N'utilisez pas mysql car il est déprécié, utilisez Mysqli à la place.

Ce que signifie "déprécié" :

Cela signifie qu'il ne faut pas utiliser une fonction/méthode/caractéristique logicielle spécifique/ pratique logicielle particulière ; cela signifie simplement qu'il ne faut pas l'utiliser parce qu'il y a (ou il y aura) une meilleure alternative dans ce logiciel qui devrait être utilisée à la place.

Plusieurs problèmes courants peuvent survenir lors de l'utilisation de fonctions dépréciées :

1. Les fonctions cessent tout simplement de fonctionner : Les applications ou les scripts peuvent s'appuyer sur des fonctions qui ne sont tout simplement plus prises en charge, utilisez donc leurs versions améliorées ou des alternatives.

2. Des messages d'avertissement s'affichent sur la dépréciation : Ces messages n'interfèrent normalement pas avec les fonctionnalités du site. Toutefois, dans certains cas, ils peuvent perturber le processus d'envoi des en-têtes par le serveur.

Par exemple : Cela peut causer des problèmes de connexion (les cookies/sessions ne sont pas définis correctement) ou des problèmes de transfert (redirections 301/302/303).

gardez à l'esprit que :

-Un logiciel déprécié fait toujours partie du logiciel.

-Le code déprécié est juste un statut (étiquette) du code.

Principales différences entre MYSQL et MYSQLI mysql*

  • ancien pilote de base de données
  • MySQL ne peut être utilisé que de manière procédurale
  • Aucune protection contre les attaques par injection SQL
  • Déprécié en PHP 5.5.0 et supprimé en PHP 7.

mysqli

  • nouveau pilote de base de données
  • Actuellement en cours d'utilisation
  • les déclarations préparées protègent des attaques

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X