Mensen,

Ik gebruik een script om fouten met de database connectie te kunnen bekijken.

Ik heb alleen een fout waar ik niet uit kom. Wie kan er even kijken:


function safe_query($db, $query){
  global $ERRORS;
  return false;
}

  if (DEBUG_MODE) {
  if (!$result = @mysqli_query($db, $query)) {
    die("{$ERRORS['QUERY_ERROR_ADMIN']})
    <br> uitgevoerde query: $query .
    <br> MySQL-foutnummer: ". mysqli_errno($db) .
    "<br>MySQL-melding: " . mysqli_error($db));
  }
  else {
    return $result;
  }
  }
  else{
  if (!$result = @mysqli_query($db, $query)){
    die ($ERRORS ['QUERY_ERROR_USER']);
  }
  else {
    return $result;
  }
  }



Melding op mijn scherm:

Warning: mysqli_errno() expects parameter 1 to be mysqli, string given in /public/sites/mijnsite/php/Gastenboek/functions.php on line 40

Warning: mysqli_error() expects parameter 1 to be mysqli, string given in /public/sites/mijnsite /php/Gastenboek/functions.php on line 41
Er is een fout opgetreden bij het werken met de database
)
uitgevoerde query: null .
MySQL-foutnummer:
MySQL-melding:
Wat heeft een connectie met een config-file te maken?

Laat eens zien hoe hij eruit ziet?

Ik meld alleen dat de connectie in zo'n config file zit. Bovenstaande is de connectie met de database dat is ook het enige wat in die file zit.
Ik heb dit daarvoor in mijn schrijfbestand staan.


  if (!$db = mysqli_connect($host, $gebruiker, $wachtwoord, $database)) {
    echo '<h2>Het openen van de database is mislukt</h2>';
    echo 'De MySQL-foutmelding luidt: ' . mysqli_connect_error();
    exit;


Moet ik anders voor de duidelijkheid de files even uploaden?
Maar daarna zet je $db op NULL, en wordt je connectie weer weggegooid. Dat hoort niet.
Maar kan je mij eens duidelijk uitleggen wat dat te maken heeft met de query controle? Het ging allemaal prima tot ik de code uit bericht #1 toevoegde.

Ik ben het aan het leren he dus ik wil graag begrijpen hoe en wat.
Het schrijven van een wrapper (een collectie van hulpfuncties of -methoden) voor database-gerelateerde handelingen kan handig zijn, maar ik denk dat er hier teveel dingen worden gecombineerd.

Het gebruiken van die() kan resulteren in een half HTML-document wat andere webpagina-functionaliteit kan breken dus dit lijkt mij (in dit geval, het hangt natuurlijk af van wat je bouwt) geen goed idee. Dit is trouwens prima geschikt voor ontwikkeling maar waarschijnlijk niet zo'n fantastische keuze voor een productie-omgeving.

Overigens kun je het "moment van foutafhandeling" uitstellen (dit is vooral handig voor live-omgevingen). En de manier waarop de fout afgehandeld wordt hoeft geen onderdeel uit te maken van je wrapper functionaliteit. Dit doe je met exceptions. Een exception beschrijft een (semi-)onvoorziene situatie die optreedt. Hiermee geeft de wrapper in feite aan "kan iemand mij vertellen wat ik hiermee moet doen". Vervolgens moet een ander proces deze exception oppikken (anders resulteert dit alsnog in een fatal error) en verder afhandelen. Dit doe je met een try-catch blok.

Anyway, het lijkt mij handiger om een wrapper te schrijven in OOP-code (te meer omdat mysqli zelf ook object-georiënteerd is en) omdat dit (ook) beter past in het try-catch stramien.

Daarnaast is het gebruik van een @ niet per definitie taboe, zolang je maar iets met mogelijk opgetreden fouten doet.
Geen idee precies, maar ik denk dat er een variabele verkeerd stond.

@Thomas: Ik hoop dat een beginner als Rubensky je snapt. Je draaft een beetje door.
Tomas ik begrijp maar voor een heel klein deel wat je hier neer zet. En daarnaast heb ik geen idee hoe ik met de door jou geschreven zaken verder moet om de fout weg te krijgen.
@Ariën het is te allen tijde zowel voor beginners als gevorderden belangrijk om verschillende taken en verantwoordelijkheden in code te scheiden om zo het overzicht te bewaren.

Maakt niet uit of dit beginnerscode of geavanceerd spul is: wanneer je teveel combineert resulteert dit in een onoverzichtelijke brei waarin weinig tot niets aangepast kan worden zonder dat de hele toren instort.

@Rubensky mysqli_error() en mysqli_errno() verwachten één parameter: het database-object. Deze is van de klasse mysqli. Je roept dit aan met iets wat niet van het type (de klasse) mysqli is.

Reageren