Funkce MySQL pod PHP7
Malá knihovna pro modernizaci PHP projektu
3. 8. 2018
K čemu to?
– PHP 7: Mysql funkce neexistují
Migrujete staré projekty na nový webhosting?
Přecházíte z PHP5 na PHP7?
Staré projekty vám pod PHP7 nefungují?
Hosting na PHP 7 vám háže chybovou hlášku např.
„Fatal error: Uncaught Error:
Call to undefined function mysql_connect()”
nebo
„Fatal error: Uncaught Error:
Call to undefined function mysql_query()” ?
Pak asi váš PHP projekt pro práci s SQL databází používá starou knihovnu mysql, která už v PHP7 není obsažena.
Ideální postup by byl celý projekt přepsat tak,
aby pracoval s novými funkcemi nové knihovny mysqli.
Protože by to ale bylo docela dost práce,
připravil jsem pro rychlou snadnou centrální úpravu starých projektů sadu několika funkcí,
které umožní provést centrální transformaci projektu pro provoz pod PHP7.
Je to jednoduchá konverze starých funkcí na nové,
resp. je to definice aliasů k novým mysqli funkcím tak,
aby šly volat stejně jako staré mysql funkce.
Co to?
– Malá knihovna funkcí pro převod starého projektu na PHP7
Adaptace starých projektů z PHP5 pro provoz na hostingu s PHP7.
Rychlá centrální úprava dynamických webů a webových aplikací využívajících knihovnu mysql na PHP7,
které už mysql neobsahuje a vyžaduje využívání modernější knihovny mysqli.
Snad se vám to někomu bude hodit a ušetřím vám tím čas.
Napsal jsem následující mikroknihovničku pro hromadnou konverzi některých už neexistujících funkcí na nové.
Tuto knihovnu si uložte do souboru a includujte hned na začátku svého projektu (pomocí include_once nebo require_once).
Je určena pro PHP7 a novější, kde už neexistuje stará knihovna mysql.
Když ji do projektu omylem vložíte na hostingu s PHP5 (kde z podstaty není potřeba),
tak se moje definice pohádají s původní knihovnou, která byla v PHP5 obsažena.
Je to jen základ
– Vyrobil jsem jen to, co jsem potřeboval
Neladil jsem všechny možné případy,
tuto mikroknihovničku jsem napsal pro konkrétní staré projekty,
které jsem dostal za úkol na PHP 7 adaptovat.
Budiž vám tento základ inspirací.
Případné chybějící detaily si buď doladíte sami,
anebo vám je za úplatu dopíšu, pokud to bude rozumně realizovatelné.
Ať už to jsou zcela chybějící funkce, které jsem pro konverzi konkrétních projektů nepotřeboval;
anebo vámi požadované chování zde napsaných funkcí ve specifických situacích při nestandardních vstupech,
kvůli kterým tyto funkce ve vašich projektech např. házejí warningy.
PHP7 není jen zrušení staré knihovny MySQL
Počítejte ale také s tím, že PHP7 přineslo více změn a více zrušení zastaralých funkcí.
Nejde tedy jen o to zrušení knihovny mysql.
Zvažte, zda se vám vyplatí váš projekt takto upravovat.
PHP kód: Mikroknihovnička
pro převod starých funkcí z knihovny mysql
na nové z knihovny mysqli (PHP 7)
<?php // centralni konverze stareho pripojeni k SQL via knihovnu mysql (do php5 vcetne; uz neni v php7) na pripojeni novym zpusobem via knihovnu mysqli (nutna od php7) // toto se musi includnout na zacatku projektu, nez se vubec zacne pripojovat k databazi; ale nesmi se to includnout na hostingu s php5, protoze tam by se to hadalo s tam existujicimi funkcemi // !!! Při nasazování na konkrétní projekty nutno editovat názvy proměnných na řádcích s komentářem: "zdeeditovat" !!! // základ připravil Martin Adámek, Náchod, www.adamek.cz function MySQL_Connect($host, $user, $pass) { return mysqli_connect( $host, $user, $pass); } function MySQL_Select_DB($db) { global $pripojeni; // zdeeditovat // proměnná, ve které je uložené info o navázaném připojení return mysqli_select_db($pripojeni, $db); } function mysql_query($dotaz) { global $pripojeni; // zdeeditovat // proměnná, ve které je uložené info o navázaném připojení return mysqli_query( $pripojeni, $dotaz); // zdeeditovat } function mysql_fetch_row($dotaz) { return mysqli_fetch_row( $dotaz); } function mysql_fetch_assoc($dotaz) { return mysqli_fetch_assoc( $dotaz); } function mysql_fetch_array($dotaz, $typ = MYSQLI_BOTH) { // pokud ve svých projektech používáte definici typu pomocí konstanty "MYSQL_", budete si sem muset dopsat nějaký převod např. pomocí "switch case" return mysqli_fetch_array( $dotaz, $typ); } function mysql_result($vysledek, $radeknula, $pole=0) // radek muze v teto funkci byt jen nula (cili prvni radek), tento parametr je zde ignorovan (!!!), protoze nebylo potreba resit prevod pro pripady, kdy je pozadovan jiny nez prvni radek (radek cislo nula) // Funkcionalitu pro zjištění jiného řádku lze do této funkce dopsat, jen jsem ji nepotřeboval // $pole je obvykle nula, kdyz se chce prvni cast vysledku, obvykle jednodilneho, ale muze byt i jina hodnota { $radek = array(); if ( $vysledek === false ) $radek[$pole]=null; else $radek = mysqli_fetch_array($vysledek); // Tady muze skocit warning, ze pozadovana polozka z arraye je undefined, prestoze SQL vysledek nebyl null. Pokud ve vasem projektu takovy warning vyskakuje, je mozne ho tady osetrit, napr. pomoci isset. return $radek[$pole]; } function mysql_num_rows($vysledek) { return mysqli_num_rows($vysledek); } function mysql_real_escape_string($vstupnitext) { global $pripojeni; // zdeeditovat // proměnná, ve které je uložené info o navázaném připojení return mysqli_real_escape_string($pripojeni, $vstupnitext); } function mysql_insert_id() { global $pripojeni; // zdeeditovat // proměnná, ve které je uložené info o navázaném připojení return mysqli_insert_id($pripojeni); } // Těch několik "global" požadavků pro přístup k hodnotě proměnné z hlavního běhu je tam proto, že nová mysqli knihovna potřebuje přístup k informaci o připojení i u některých funkcí, jejichž předchůdci v knihovně mysql informaci o připojení nepotřebovali. ?>