Hallo,

Sinds de update van PHP v.4.2 naar v.7.1 op de servers van ONE.com heb ik problemen met MySQL connect.
Ik geraak niet meer in mijn database en heb errors op 2-3 pagina's.

in config.php had ik dit:
mysql_connect($host,$user,$pass) or die(mysql_connect_error());
mysql_select_db($data) or die(mysql_connect_error());


en heb dit aangepast naar:
mysqli_connect($host,$user,$pass) or die(mysqli_connect_error());
mysqli_select_db($data) or die(mysqli_connect_error());


Zou dit dan niet moeten werken?


Alvast bedankt.
Mvg.
Bij mysqli moet je (bijna) altijd de connectie expliciet meegeven als eerste parameter. Dus het wordt (en meteen die connect error alleen na de connect):

$link = mysqli_connect($host,$user,$pass) or die(mysqli_connect_error());
if(!$link) die(mysqli_connect_error());
mysqli_select_db($link,$data) or die(mysqli_error($link));

(en dus ook voor al je andere mysql aanroepen)
Wacht even....
Een upgrade van PHP 4.2(!!!!) naar 7.x?
Serieus?

Dat gaat wel veel verder dan enkel mysql-functies ombouwen naar mysqli.

PHP 4.2 stamt uit 2002!!!!
Ik hoop toch echt dat je PHP 5.2 bedoelt.
Aad B op 14/12/2018 22:09:06
Kijk eens naar: https://vevida.com/help/converteer-php-mysql-naar-mysqli-voor-het-te-laat-is/


Het advies wat daar gegeven wordt om met een aardappelstempel maar alles in elk PHP-bestand aan te passen naar de nieuwe variant lijkt mij geen goed plan. Maak er dan op zijn minst één include van zodat je één bron hebt voor je connectie. Wat als straks de connectie-parameters of andere zaken veranderen? Kun je dezelfde truuk opnieuw gaan uitvoeren.

En dan hebben we het nog niet gehad over alle aanroepen van mysql_query() en aanverwante functies zelf. Nu wordt dat dan vertaald naar mysqli_query(). En straks naar weer iets anders. Als je hier nu eens een tussenlaag in aanbrengt voor communicatie met je MySQL-database (dit wordt ook wel een Data Access Abstraction Layer (DAAL) genoemd) zodat er een zekere abstractie is van een hard coded aanroep. Als er dan straks weer iets verandert in MySQL-land dan hoef je enkel de implementatie van de tussenlaag aan te passen, en niet alle hard coded instanties van mysqli-functies of -methoden. Hiervoor zou je PDO kunnen gebruiken, maar hierbij moet je je wel realiseren dat PDO niet geschreven is voor, noch geoptimaliseerd is voor gebruikmaking van MySQL. Als je toch enkel een MySQL-database gebruikt kun je dus beter een DAAL maken voor MySQLi.

Maar misschien moet men hier eerst maar eens tegenaan lopen voordat de realisatie echt inzinkt dat een andere strategie wellicht beter was geweest.

Uiteraard is dit voor een eerste conversie (alles rechtstreeks van mysql_ naar mysqli_) prima, maar vervolgens vallen er al snel meer lijken uit de kast want vaak is de rest van de code ook (hopeloos) gedateerd. Dit is dus eigenlijk een goed moment om *alle* code eens goed onder handen te nemen en te kijken wat er verbeterd kan worden aan structuur en ook vooral aan veiligheid.
Rob Doemaarwat op 14/12/2018 22:08:26

Bij mysqli moet je (bijna) altijd de connectie expliciet meegeven als eerste parameter. Dus het wordt (en meteen die connect error alleen na de connect):

$link = mysqli_connect($host,$user,$pass) or die(mysqli_connect_error());
if(!$link) die(mysqli_connect_error());
mysqli_select_db($link,$data) or die(mysqli_error($link));

(en dus ook voor al je andere mysql aanroepen)



Dank voor alle tips!

Ik heb de mysqli overal aangepast, het lijkt alsof dit nu ok is, maar zoals Thomas zei, krijg ik nu een query error dat van een andere include pagina komt: (chk_ban.php):
http://dscwindowtinting.be/index2.php
Warning: mysqli_query() expects at least 2 parameters, 1 given in /customers/3/1/3/dscwindowtinting.be/httpd.www/includes/chk_ban.php on line 9 Warning: mysqli_error() expects exactly 1 parameter, 0 given in /customers/3/1/3/dscwindowtinting.be/httpd.www/includes/chk_ban.php on line 9 FOUT IN DE QUERY:


chk_ban.php

<?php
// /includes/chk_ban.php

include ("config.php");

$ipadres=$_SERVER['REMOTE_ADDR'];
//query opbouwen
$query="SELECT * FROM ipban WHERE ipadres='" .$ipadres ."'";
$result=mysqli_query($query) or die ("FOUT IN DE QUERY: " . mysqli_error());

//als het ipadres van de bezoeker is gevonden in de ipbanlijst dan
//doorsturen naar een zelf te kiezen pagina
$aantal = mysqli_num_rows($result); 
if ($aantal >= 1){ 
   header("Location: http://dscwindowtinting.be/verbannen");
   die ();
}
?>
Je mist de connectie-parameter in je query. Idem dito in je mysqli_error(...)
Dit heb ik helemaal gelezen, mijn script aangepast,
en het werkt!

Maar op de andere site heb ik nog steeds 1 pagina dat ambetant doet.
2 errors die ik niet meteen opgelost krijg.

In lijn 11 hier:

//Warning: mysqli_query() expects at least 2 parameters, 1 given in /customers/4/3/5/t-s.be/httpd.www/gallery.php on line 206

<? } // end of more()

function overview() {
$categorie = $_GET["cat"];
if ($categorie == "") {
	$categorie = 1;
}
$query = "select * from car where categorie = '".$categorie."' order by id desc";
$res = mysqli_query($query);
?>


En hier in lijn 5:

//Error: Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in /customers/4/3/5/t-s.be/httpd.www/gallery.php on line 255

<?
$teller = 0;
while ($teller < mysqli_num_rows($res)){
$row = mysqli_fetch_array($res, MYSQL_BOTH); 	
?>


Heb al het een en het ander geprobeerd, zonder succes.
iemand een idee?
Voor het antwoord raad ik je aan om alles nog eens te lezen.
En zoek meteen eens op "SQL injectie".

Reageren