Zur Navigation

Deprecated

1 tobi

Hallo,

ich habe meine Webseite kopiert. Beim alten lief PHP 5.4, jetzt läuft 5.6 und es kommt nun folgende Fehlermeldung.
Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead

Heißt für mich mysql ist veraltet und man soll nun mysqli oder PDO benutzen.

Kann ich nun einfach aus msyql einfach mysqli machen?
<?php
$link = mysql_connect('dbserver', 'db-name', 'pw');
mysql_set_charset('utf8',$link);
if (!$link) {
    die('Verbindung nicht möglich : ' . mysql_error());
}

// benutze Datenbank db-name
$db_selected = mysql_select_db('db-name', $link);
if (!$db_selected) {
    die ('Kann Datenbank nicht benutzen : ' . mysql_error());
}

mysql_set_charset('utf8',$link); 
?>

so:
<?php
$link = mysqli_connect('dbserver', 'db-name', 'pw');
mysqli_set_charset('utf8',$link);
if (!$link) {
    die('Verbindung nicht möglich : ' . mysqli_error());
}

// benutze Datenbank db-name
$db_selected = mysqli_select_db('db-name', $link);
if (!$db_selected) {
    die ('Kann Datenbank nicht benutzen : ' . mysqli_error());
}

mysqli_set_charset('utf8',$link); 
?>

Gruß Tobi

13.04.2016 10:40

2 Jörg Kruse

prozedural:

$mysqli = mysqli_connect('dbserver', 'db-name', 'pw', 'db-name');
if (mysqli_connect_errno($mysqli)) {
    echo 'Kann Datenbank nicht benutzen : ' . mysqli_connect_error();
}
mysqli_set_charset('utf8');

... oder objektorientiert:

$mysqli = new mysqli('dbserver', 'db-name', 'pw', 'db-name');
if ($mysqli->connect_errno) {
    echo 'Kann Datenbank nicht benutzen : ' . $mysqli->connect_error;
}
$mysqli->set_charset('utf8');

Zweiteres würde ich für neue Projekte emfehlen, zumal auch die meisten Beispiele im PHP-Manual objektorientiert sind; zum schnellen Umarbeiten der prozeduralen mysql Funktionen zu mysqli Entsprechungen ist ersteres möglicherweise einfacher.

Funktionsaufrufe von mysql_query(), mysql_fetch_row() etc. müssen natürlich auch noch transferiert werden werden.

13.04.2016 11:52 | geändert: 13.04.2016 11:53

3 tobi

jetzt tauchen nur meldungen auf:
Warning: mysqli_set_charset() expects exactly 2 parameters, 1 given in on line 6
Warning: mysqli_select_db() expects parameter 1 to be mysqli, string given in on line 10
Warning: mysqli_error() expects exactly 1 parameter, 0 given in line 12 Kann Datenbank nicht benutzen :

<?php
$mysqli = mysqli_connect('db-server', 'db-name', 'pw');
if (mysqli_connect_errno($mysqli)) {
    echo 'Kann Datenbank nicht benutzen : ' . mysqli_connect_error();
}
mysqli_set_charset('utf8');


// benutze Datenbank db-name
$db_selected = mysqli_select_db('db-name', $mysqli);
if (!$db_selected) {
    die ('Kann Datenbank nicht benutzen : ' . mysqli_error());
}

mysqli_set_charset('utf8',$mysqli); 
?>

13.04.2016 12:25 | geändert: 13.04.2016 13:04

4 tobi

so konnte ich nun diese fehlermeldungen ausmetzen, hoffe dies ist richtig geschrieben:
<?php
$mysqli = mysqli_connect('db-server', 'db-name', 'pw');
if (mysqli_connect_errno($mysqli)) {
    echo 'Kann Datenbank nicht benutzen : ' . mysqli_connect_error();
}
mysqli_set_charset($mysqli, 'utf8');


// benutze Datenbank db-name
$db_selected = mysqli_select_db($mysqli, 'kdb-name');
if (!$db_selected) {
    die ('Kann Datenbank nicht benutzen : ' . mysqli_error());
}

mysqli_set_charset($mysqli, 'utf8'); 
?>

aus
$result_samstag = mysql_query($sql_samstag);
hab ich nun einfach
$result_samstag = mysqli_query($sql_samstag); 
gemacht. Fehlermeldungen gibt es dennoch.

Bei mysql_fetch_row ebenfalls. Hier habe ich bspw.
list($count_samstag) = mysqli_fetch_row($result_samstag);

13.04.2016 13:15 | geändert: 13.04.2016 13:26

5 Jörg Kruse

mysqli_select_db() benötigst du nicht, du kannst den Datenbanknamen als vierten Parameter von mysqli_connect() angeben - so wie in Beitrag 2

und zweimal mysqli_set_charset() zu verwenden ist auch überflüssig

Warning: mysqli_set_charset() expects exactly 2 parameters, 1 given in on line 6

Ja, da muss oft noch $mysqli als Parameter mit angegeben werden. (Nicht nur) deswegen verwende ich die objektorientierte Variante, da hat man weniger zu schreiben und es ist weniger fehleranfällig.

Fehlermeldungen gibt es dennoch.

Die da wären?

13.04.2016 13:39

6 tobi

Warning: mysqli_query() expects at least 2 parameters, 1 given in /index.php on line 28
Warning: mysqli_fetch_row() expects parameter 1 to be mysqli_result, null given /index.php on line 29

13.04.2016 13:41

7 Jörg Kruse

Da muss dann auch wieder $mysqli als erster Paramater angegeben werden:

$result_samstag = mysqli_query($mysqli, $sql_samstag);

Der zweite Fehler ist wohl nur ein Folgefehler des ersten

13.04.2016 13:44 | geändert: 13.04.2016 13:45

8 tobi

Das $mysqli hatte ich anfangs mal hinzugefügt, hatte aber keinen Erfolg gebracht gehabt. Nun habe ich die Fehler soweit ausgebügelt auf der einen Seite.

Wie schaut es hiermit aus, wie müßte dies aussehen?

if (mysql_fetch_object(mysql_query('SELECT * FROM `anmeldungen_2015_samstag` WHERE `vorname` = \'' . mysql_real_escape_string($_POST['vorname']) . '\' AND `nachname` = \'' . mysql_real_escape_string($_POST['nachname']) . '\' LIMIT 1'))) {

so:
    if (mysqli_fetch_object(mysqli_query('$mysqli, SELECT * FROM `anmeldungen_2015_samstag` WHERE `vorname` = \'' . mysqli_real_escape_string($_POST['vorname']) . '\' AND `nachname` = \'' . mysqli_real_escape_string($_POST['nachname']) . '\' LIMIT 1'))) {

14.04.2016 08:34

9 Jörg Kruse

mysqli_query('$mysqli, SELECT * FROM `anmeldungen_2015_samstag` /* ... */ LIMIT 1')

Das erste ' ist verrutscht, die beiden ' sollen ja Beginn und Ende der Query markieren:

'SELECT FROM * `anmeldungen_2015_samstag` /* ... */ LIMIT 1'

14.04.2016 11:58

10 tobi

Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in  line 169 
Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in  on line 169 

Zeile 169 wäre:
if (mysqli_fetch_object(mysqli_query($mysqli, 'SELECT * FROM `anmeldungen_2015_samstag` WHERE `vorname` = \'' . mysqli_real_escape_string($_POST['vorname']) . '\' AND `nachname` = \'' . mysqli_real_escape_string($_POST['nachname']) . '\' LIMIT 1')))

müßte dann wohl auch so aussehen, richtig:
mysqli_real_escape_string($mysqli, $_POST['vorname']) . '\' AND `nachname`

desweiteren bekomme ich noch:
Warning: mysqli_error() expects exactly 1 parameter, 0 given in on line 396 MySQL Error:
die('<b>MySQL Error:</b><div class="rot">' . mysqli_error( ) . '</div><br/>');

14.04.2016 12:53 | geändert: 14.04.2016 12:57