Ik heb de afgelopen tijd heel veel vragen gesteld maar ik kom tot de ontdekking het niet goed te begrijpen. Daarom back to basic. Als mensen mij willen helpen zou ik het leuk vinden anders houd het op.
Ik begin wel met een database.
Ik heb een connectie gemaakt. Daar heb ik mijn eerste vraag dan ook over:
Ik zal de code later hieronder plaatsen. De vraag is waarom krijg ik geen echo als de connectie mislukt en wel als deze lukt?
Je controleert alleen of $conn niet bestaat, en dat heeft geen weet van de connectie met je database.
Als je wilt weten of de connectie gelukt is, kijk dan naar het connect_errno() method.
<?php
if ($con->connect_errno) {
echo "Connectie mislukt: (" . $conn->connect_errno . ") " . $conn->connect_error;
}
?>
Jullie hebben gelijk dat ik alleen het bestaan test. Nu heb ik bewust een fout gemaakt om te kijken of het werkt en krijg ik deze preek op mijn scherm:
Warning: mysqli::mysqli(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /public/sites/mijnwebsite/project/database.php on line 7
Warning: mysqli::mysqli(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in /public/sites/mijnwebsite/project/database.php on line 7
Connectie mislukt: (2002) php_network_getaddresses: getaddrinfo failed: Name or service not known
Ik test op een eigen domein. Het is dus daadwerkelijk live.
Als het 'live' is kan je PHP-errors beter uitzetten. Het verklapt voldoende voor hackers en anders gespuis, en met deze "Chinese" taal maak je mensen bang ("Help, mijn browser/$browsernaam) is stuk"). Ja, die mensen heb ik wel eens gezien. ;-)
De beste oplossing is om een mooie error-handler in PHP te maken, waarin je de bezoekers geruststelt met een vriendelijke foutmelding, waarbij je met error_log ervoor zorgt dat de foutmelding netjes in een bestand wordt gelogd.
Heel belangrijk is ook om te begrijpen hoe een functie/method werkt. Veel starters zijn zich niet bewust dat ze een reeks aan in php ingebouwde functies gebruiken en dat die functies iets terug kunnen geven.
Jij gebruikt reeds de OOP versie van Mysqli. Is het niet handiger om de Procedural mysqli_ functies te gebruiken?
Het maken van een connectie met de database ziet er dan zo uit:
<?php
$conn = mysqli_connect('localhost', 'username', 'password', 'database');
Als je op php.net kijkt dan zie je bij de mysqli functies over het algemeen twee voorbeelden staan: "Object oriented style" en "Procedural style". Hou iig één van de twee aan.
De controle die @Frank hierboven doet levert mogelijk niet het gewenste resultaat op, omdat mysqli_connect() altijd een object retourneert, zelfs als de connectie mislukt. Dit object evalueert dus nooit tot false en daarom is !$conn dus ook geen goede check voor het slagen of mislukken van de verbinding. Dit is de afgelopen tijd al minstens 2 keer aangehaald trouwens :p.
Ik laat de error afhandeling nog even varen. Eerst wil ik iets anders leren :) Ik maak een scriptje waarmee ik gegevens uit een formulier in een database wil proppen. Alleen heb ik nooit goed begrepen waar ik de mist in ga met de verwerking.
1. Je controleert nergens of het formulier gesubmit is.
2. Addslashes is GEEN query beveiliging, gebruik de escaping functie die bij je database hoort.
3. Je voert nergens een query uit.