PHP5 naar PHP7
Beste leden van PHPhulp,
De volgende connectie script doet het niet meer sinds de verandering van PHP5 naar PHP7.
De volgende error krijg ik: HTTP ERROR 500.
Heeft iemand een idee, wat ik in het script moet veranderen?
Met vriendelijke groet,
Levy van der Meijden
De volgende connectie script doet het niet meer sinds de verandering van PHP5 naar PHP7.
De volgende error krijg ik: HTTP ERROR 500.
Heeft iemand een idee, wat ik in het script moet veranderen?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
/* Define MySQL connection details and database table name */
$SETTINGS["hostname"]='localhost';
$SETTINGS["mysql_user"]='REPLACE';
$SETTINGS["mysql_pass"]='REPLACE';
$SETTINGS["mysql_database"]='REPLACE';
$SETTINGS["data_table"]='data'; // this is the default database name that we used
/* Connect to MySQL */
if (!isset($install) or $install != '1') {
$connection = mysql_connect($SETTINGS["hostname"], $SETTINGS["mysql_user"], $SETTINGS["mysql_pass"]) or die ('Unable to connect to MySQL server.<br ><br >Please make sure your MySQL login details are correct.');
$db = mysql_select_db($SETTINGS["mysql_database"], $connection) or die ('request "Unable to select database."');
};
?>
/* Define MySQL connection details and database table name */
$SETTINGS["hostname"]='localhost';
$SETTINGS["mysql_user"]='REPLACE';
$SETTINGS["mysql_pass"]='REPLACE';
$SETTINGS["mysql_database"]='REPLACE';
$SETTINGS["data_table"]='data'; // this is the default database name that we used
/* Connect to MySQL */
if (!isset($install) or $install != '1') {
$connection = mysql_connect($SETTINGS["hostname"], $SETTINGS["mysql_user"], $SETTINGS["mysql_pass"]) or die ('Unable to connect to MySQL server.<br ><br >Please make sure your MySQL login details are correct.');
$db = mysql_select_db($SETTINGS["mysql_database"], $connection) or die ('request "Unable to select database."');
};
?>
Met vriendelijke groet,
Levy van der Meijden
De Mysql_*****() functies werken niet meer in PHP 7. Gebruik de mysqli_***() functies of PDO.
mysqli
mysqli
Gewijzigd op 05/03/2019 16:29:55 door - Ariën -
Errorlogs zijn je vriend. Check je log-directory. PHP-foutmeldingen zijn doorgaans superduidelijk en leggen vrijwel direct de vinger op de zere plek.
In dit geval zal het directe probleem waarschijnlijk inderdaad het ontbreken van de default MySQL driver (de collectie mysql_* functies) zijn.
Misschien is het ook belangrijk om je te realiseren dat software een houdbaarheidsdatum heeft. De principes waarmee jouw functionaliteit / website / applicatie is geprogrammeerd zijn mogelijk verouderd, en dan heb ik het niet alleen over code met betrekking tot mysql.
Als je van PHP 5.x naar PHP 7.y gaat dan lijkt het mij onverstandig om enkel wat database-gerelateerde functies om te gooien en het dan maar te laten voor wat het is. Er zijn in de tussentijd aardig wat spelregels veranderd.
In dit geval zal het directe probleem waarschijnlijk inderdaad het ontbreken van de default MySQL driver (de collectie mysql_* functies) zijn.
Misschien is het ook belangrijk om je te realiseren dat software een houdbaarheidsdatum heeft. De principes waarmee jouw functionaliteit / website / applicatie is geprogrammeerd zijn mogelijk verouderd, en dan heb ik het niet alleen over code met betrekking tot mysql.
Als je van PHP 5.x naar PHP 7.y gaat dan lijkt het mij onverstandig om enkel wat database-gerelateerde functies om te gooien en het dan maar te laten voor wat het is. Er zijn in de tussentijd aardig wat spelregels veranderd.
Bedankt voor de reactie,
De functie mysqli_*** doet het, maar als ik de waarden invul, krijg ik nog de melding: request "Unable to select database."
if (!isset($install) or $install != '1') {
$connection = mysqli_connect($SETTINGS["hostname"], $SETTINGS["mysql_user"], $SETTINGS["mysql_pass"]) or die ('Unable to connect to MySQL server.<br ><br >Please make sure your MySQL login details are correct.');
$db = mysqli_select_db($SETTINGS["mysql_database"], $connection) or die ('request "Unable to select database."');
};
De waarden van de settings zijn goed.
@thomas van den Heuvel, bedankt voor je informatie.
De functie mysqli_*** doet het, maar als ik de waarden invul, krijg ik nog de melding: request "Unable to select database."
if (!isset($install) or $install != '1') {
$connection = mysqli_connect($SETTINGS["hostname"], $SETTINGS["mysql_user"], $SETTINGS["mysql_pass"]) or die ('Unable to connect to MySQL server.<br ><br >Please make sure your MySQL login details are correct.');
$db = mysqli_select_db($SETTINGS["mysql_database"], $connection) or die ('request "Unable to select database."');
};
De waarden van de settings zijn goed.
@thomas van den Heuvel, bedankt voor je informatie.
Draai die twee parameters eens om? Eerst de connection dan de databasenaam.
De volgorde van de parameters van select_db() is veranderd.
De $connection en $db omgedraaid, maar nog steeds de melding -> Unable to select database).
In welke volgorde zou dit dan moeten?
In welke volgorde zou dit dan moeten?
Eerst de connectie, en dan de databasenaam?
En anders moet je even je script uitbreiden en aan de mysqli-functie bibliotheek vragen wat er loos is:
Je kan ook de connectie en de database benoemen in één dezelfde functie. Hier een snippet van php.net.
Het is wel verstandig om dergelijke foutmeldingen wel op de achtergrond te loggen, en op het scherm enkel een algemene foutmelding te tonen. Gebruikers boeit het niets dat 'een database onbereikbaar is'. Bij ontwikkelen kan je dergelijke technische meldingen wel op het scherm laten zien.
En anders moet je even je script uitbreiden en aan de mysqli-functie bibliotheek vragen wat er loos is:
Je kan ook de connectie en de database benoemen in één dezelfde functie. Hier een snippet van php.net.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db");
if (!$link) {
echo "Error: Unable to connect to MySQL." . PHP_EOL;
echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
exit;
}
echo "Success: A proper connection to MySQL was made! The my_db database is great." . PHP_EOL;
echo "Host information: " . mysqli_get_host_info($link) . PHP_EOL;
mysqli_close($link);
?>
$link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db");
if (!$link) {
echo "Error: Unable to connect to MySQL." . PHP_EOL;
echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
exit;
}
echo "Success: A proper connection to MySQL was made! The my_db database is great." . PHP_EOL;
echo "Host information: " . mysqli_get_host_info($link) . PHP_EOL;
mysqli_close($link);
?>
Het is wel verstandig om dergelijke foutmeldingen wel op de achtergrond te loggen, en op het scherm enkel een algemene foutmelding te tonen. Gebruikers boeit het niets dat 'een database onbereikbaar is'. Bij ontwikkelen kan je dergelijke technische meldingen wel op het scherm laten zien.
Bedankt voor de informatie, de connectie is gelukt.
Dan zou je hierop verder kunnen borduren, en de query's en dergelijke ombouwen naar mysqli.
Let op dat het niet zomaar enkel een 'i' toevoegen is, maar vaak zijn de parameters bij de functies ook anders. Check daarom altijd php.net even!
Let op dat het niet zomaar enkel een 'i' toevoegen is, maar vaak zijn de parameters bij de functies ook anders. Check daarom altijd php.net even!
Retourneede mysqli_connect() niet te alle tijden een object? Ook als de connectie mislukt? Een controle met een ! (uitroepteken) is dan ook niet afdoende, gebruik hiervoor de functies die dit controleren, concreet o.a. connect_error.




