Dan krijg ik wel de melding 'Connected successfully'
Waarom lukt het bij de database 'MySQL' wel en niet bij de 'testdb' database?
Nog wat gegevens voor als het nodig is.
Ik gebruik:
- wampserver: Versie 3.2.0 - 32bit
- Apache Versie: 2.4.41
- phpmyadmin Versie: 4.9.2
- MySQL Versie: 5.7.28
Hoe heb je deze database aangemaakt? Met PHPMyAdmin, via de prompt, iets anders? Hoe luiden de precieze commando's als je deze zelf hebt ingeklopt?
Heb je daarna ook het commando FLUSH PRIVILEGES; uitgevoerd?
Weet je zeker dat het localhost is, en niet 127.0.0.1?
Wat zeggen de volgende queries als je deze met root uitvoert:
Ik heb de database aangemaakt met PHPMyAdmin.
Ik heb daarna niet het commando FLUSH PRIVILEGES; uitgevoerd maar nu alsnog gedaan en dan krijg ik deze melding:
"MySQL gaf een lege resultatenset terug (0 rijen)"
Bij # SELECT Host, User FROM mysql.user; krijg ik dit tabelletje:
Host | User
Localhost | mysql.session
Localhost | mysql.sys
Localhost | root
Localhost | test
Bij # SELECT Host, Db, User FROM mysql.db; krijg ik dit tabelletje:
Host | Db | User
Localhost | Performance_schema | mysql.session
Localhost | sys | mysql.sys
Localhost | tsetdb | test
Typfoutje, maar die heb ik hier in het forum gemaakt en niet in PHPMyAdmin. Ik heb het over getypt en ben dyslectisch.(inderdaad niet altijd handig met programmeren lol)
Voor de zekerheid heb ik alles nog eens goed nagekeken maar in de code en in phpmyadmin is alles wel goed geschreven.
Ik heb de verbinding ook nog maar es weer geprobeerd maar ik krijg nog steeds dezelfde melding. Ik heb echt geen idee waarom. Misschien ligt het aan wampserver en moet ik xampp eens proberen.
Geen idee wat je aan het doen bent, hoe luidt de code om een connectie te maken nu dan?
In je oorspronkelijke vraagstuk had je dezelfde foutmelding, maar het maken van een connectie middels root ging toen wel goed. Hoe kan dat dan foutgaan als je enkel de waarde van $username verandert, als dat daadwerkelijk het enige is wat je hebt aangepast (ik zou niet weten wat je verder zou willen veranderen)?
Ik zou voorstellen om één ding tegelijkertijd te veranderen, of in ieder geval de laatste toestand door te geven in je reacties, anders wordt het vrij onmogelijk om te analyseren wat er precies fout gaat.
NB die SELECT queries vragen enkel informatie op, deze wijzigen niets in gebruikers, databases of privileges, dit was enkel om een overzicht op te roepen van de huidige toestand hiervan en dit legde al meteen een typefout bloot. Het daarna aanroepen van FLUSH PRIVILEGES, tenzij je ondertussen inhoudelijk iets hebt verandert, heeft dan ook geen enkel effect.
In je oorspronkelijke vraagstuk had je dezelfde foutmelding, maar het maken van een connectie middels root ging toen wel goed. Hoe kan dat dan fout gaan als je enkel de waarde van $username verandert, als dat daadwerkelijk het enige is wat je hebt aangepast (ik zou niet weten wat je verder zou willen veranderen)?
Het klopt dat de connectie met root wel goed ging maar dan alleen als ik de database "MySQL" heb geselecteerd.
Ik zal hieronder precies aangeven wat wel werkt en waar ik welke foutmelding bij krijg:
$servername = "localhost";
$username = "root";
$dbname = "MySQL";
$password = "";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
// dit werkt wel
$servername = "localhost";
$username = "test";
$dbname = "MySQL";
$password = "";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
// Dit werkt niet en krijg ik de volgende foutmelding:
// Connection failed: Access denied for user '/* is leeg */'@'localhost' to database 'mysql'
$servername = "localhost";
$username = "test";
$dbname = "testdb";
$password = "";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
// Dit werkt ook niet en krijg ik dezelfde foutmelding:
// Connection failed: Access denied for user '/* is leeg */'@'localhost' to database 'testdb'
$servername = "localhost";
$username = "root";
$dbname = "testdb";
$password = "";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
// En dit werkt ook niet maar krijg nu deze foutmelding:
// Connection failed: Unknown database 'testdb'
Zoals jullie kunnen zien op de eerste afbeelding in mijn vorige bericht staat dat de gebruikersnamen "root" en "test" de globale rechten op "ALL PRIVILEGES" staan.
En op de tweede afbeelding is te zien dat de gebruikers die toegang hebben op de database "testdb" root en test zijn.
@- SanThe -
Het valt mij eerlijk gezegd nu pas op dat in de eerste twee foutmeldingen user '' leeg zijn. Dus waarschijnlijk heeft - SanThe - wel gelijk.
Maar ik heb nog geen idee hoe ik het moet oplossen.
Dit klopt? de user "test" heeft geen toegang tot de database "mysql".
"mysql" is een database in de MySQL-database :).
Type maar eens in:
# SHOW DATABASES;
De "mysql" database bevat de structuur + metagegevens van alle andere databases... in de database :p.
Er is dus blijkbaar iets mis met de nieuw gecreëerde database "testdb".
Ik zag eerder trouwens [color=#ff0000]L[/color]ocalhost staan, en niet [color=#ff0000]l[/color]ocalhost.
Dit (zowel localhost en al helemaal Localhost) is in zekere zin een specifieke hostnaam. Je zult dus aan moeten geven naar welk IP deze naam vertaald dient te worden. Dat is de reden dat ik meestal gewoon IP's gebruik (127.0.0.1) zodat je deze koppeling niet hoeft te maken, en er ook geen lookup hoeft plaats te vinden om de vertaling host -> IP te maken.
Om er zeker van te zijn dat "localhost" geconfigureerd staat zou je in je hosts bestand moeten kijken, deze staat onder: <Windows Pad>/drivers/etc/hosts (zonder extentie).
Hierin zou op zijn minst het volgende moeten staan (alle regels die beginnen met # zijn commentaar en doen niets):
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
Maar misschien hoeft dat tegenwoordig zelfs niet meer.
Het zou in ieder geval een stuk eenvoudiger zijn om gewoon met IP's te werken zou ik zeggen.
Maar ik ben nu ongeveer bijster hoe de toestand aan jouw kant is.
Wat geven nu de volgende twee queries terug:
SELECT Host, User FROM mysql.user;
en
SELECT Host, Db, User FROM mysql.db;
En weet je ook zeker dat je het PHP-bestand hebt opgeslagen?
En weet je ook zeker dat je dit PHP-bestand aan het aanroepen bent, en niet per ongeluk een oude versie aan het bekijken bent ofzo?
Heb je de pagina ook echt ververst, zodat de browser je niet een gecachede variant serveert? Gebruik bijvoorbeeld eens een keer Ctrl-F5 ofzo?
Als dit alles niet werkt kan ik je een aantal queries + test script geven om alles nogmaals, maar dan zeker op de goede wijze, te testen.
Maar als dit al voor enorm veel problemen zorgt... maak dan je borst maar vast nat voor het moment dat je dat ding daadwerkelijk wilt gaan gebruiken :p.