SELECT query MariaDB verwerkt als string in PHP

Moderators: jkien, Xilvo

Reageer
Berichten: 41

SELECT query MariaDB verwerkt als string in PHP

Goedemiddag,

Nou heb ik een paar dagen terug mijn eerste database aangemaakt en hierin wat tabellen met kolommen gemaakt.
Nu wil ik door middel van een functie wat selecteren en printen vanuit mijn database alleen krijg ik steeds de foutmelding:

Warning: mysqli_query() expects parameter 1 to be mysqli, string given in D:\PHP MYSQL\Xampp\htdocs\Projects\MysqlTest.php on line 17

Voorheen werkte mijn MySQL syntaxis op deze manier alleen dit lijkt niet te werken voor deze functie. Het is tevens de eerste SELECT query die ik probeer en het lijkt steeds of PHP de query wilt verwerken als string ipv SQL query.

//Connect to database
$conn = mysqli_connect($servername, $username, $password, $database);
//Termination Check
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
//Function to select and print tables from database
function display_db_table($tablename, $conn) {
$query_string = "SELECT FearID FROM fears'";
$result_id = mysqli_query($query_string, $conn);
$column_count = mysqli_num_fields($result_id);

print ("<TABLE BORDER=1>\n");
while ($row = mysqli_fetch_row($result_id))
{
print ("< TR ALIGN=LEFT VALIGN=TOP>");
for ($column_num = 0; $column_num < $column_count; $column_numm++)
print ("<TD>$row[$column_num]</TD>\n");
print ("</TR>\n");
}
print ("</TABLE>\n");
}
?>

Ik heb hier alleen de functie zelf en de connectie geplaatst, niet mijn include bestanden en de manier hoe ik de functie aanroep, volgens mij is dit momenteel niet heel erg van belang verder.

Mocht het belangrijk zijn, ik probeer informatie uit een database 'mydb' te halen uit 2 tabellen 'fears' & 'persons' Ik heb de SELECT syntaxis wat versimpelt om te kijken of het daaraan lag, maar ik blijf dezelfde foutmelding krijgen. Mocht het verschil maken, ik gebruik MariaDB 10.1.38.

$query_String & $result_id zijn beide NULL aan het einde van de functie :(

Bij voorbaat dank!

Berichten: 12.262

Re: SELECT query MariaDB verwerkt als string in PHP

Even uit mijn hoofd:

Code: Selecteer alles

$result_id = mysqli_query($query_string, $conn);
moet dat niet andersom, dus

Code: Selecteer alles

$result_id = mysqli_query($conn, $query_string);
zijn?

Berichten: 41

Re: SELECT query MariaDB verwerkt als string in PHP

Benm schreef: zo 01 dec 2019, 17:16 Even uit mijn hoofd:

Code: Selecteer alles

$result_id = mysqli_query($query_string, $conn);
moet dat niet andersom, dus

Code: Selecteer alles

$result_id = mysqli_query($conn, $query_string);
zijn?

Volgens mij niet, maar ik weet het niet zeker. Het voorbeeld wat ik vanuit mijn PHP en MySQL Wiley Bible gebruik zegt namelijk van niet. Wanneer ik het omdraai komt er ook alleen een boolean uit.
Ik denk ook eerder dat de fout aan de syntaxis ligt van SQL, want ik krijg tevens deze foutmelding:

Error loading data from database: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'FROM 'fears', 'persons' ' at line 1

Gebruikersavatar
Berichten: 10.561

Re: SELECT query MariaDB verwerkt als string in PHP

Er staat een m teveel in $column_numm op regel 17

Berichten: 41

Re: SELECT query MariaDB verwerkt als string in PHP

Inderdaad, bedankt!

Maar dit verhelpt tevens het probleem niet helaas :(

Berichten: 12.262

Re: SELECT query MariaDB verwerkt als string in PHP

N00b schreef: zo 01 dec 2019, 22:40 Volgens mij niet, maar ik weet het niet zeker. Het voorbeeld wat ik vanuit mijn PHP en MySQL Wiley Bible gebruik zegt namelijk van niet. Wanneer ik het omdraai komt er ook alleen een boolean uit.
Ik denk ook eerder dat de fout aan de syntaxis ligt van SQL, want ik krijg tevens deze foutmelding:

Error loading data from database: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'FROM 'fears', 'persons' ' at line 1
Volgens de php.net documentatie is de volgorde voor mysqli_query toch echt eerst de link en dan de query, en ik gebruik dat in de praktijk ook zo. Ik sluit niet 100% uit dat het andersom ook werkt, al zou dat wel een undocumented feature zijn.

Of de query op zich geldig is of niet hangt af van de database - heb je geprobeerd deze query te doen via iets als phpmyadmin? Als je een tabel 'fears' hebt met een kolom 'FearID' zie ik zo snel niet wat er mis aan is. Let wel dat tabelnamen hoofdlettergevoelig zijn als het OS waarop je database dat ook is.

Berichten: 41

Re: SELECT query MariaDB verwerkt als string in PHP

Goedemorgen!

Je hebt helemaal gelijk, ik heb gelijk mijn boek geraadpleegd en zag dat alle voorbeelden in mysql ipv mysqli zijn geschreven. Ik dacht oprecht dat de fout in mijn query zat wegens de foutmelding omtrent de SQL statement.

Hartstikke bedankt!

Gebruikersavatar
Berichten: 17.659

Re: SELECT query MariaDB verwerkt als string in PHP

Als je de procedurele stijl gebruikt bij mysqli_* functies, dan moet je inderdaad de parameter volgorde gebruiken die @Benm benoemt.

Verder lijkt het erop dat deze query mis gaat door een single quote teveel op het eind:

Code: Selecteer alles

$query_string = "SELECT FearID FROM fears'";
in SQL wordt dat dus:

Code: Selecteer alles

SELECT FearID FROM fears'
En dat levert inderdaad een MySQL error op.

PS: welke editor gebruik je om je code te schrijven? Als je (onder Windows) bijvoorbeeld Notepad++ gebruikt, of Geany onder Linux dan krijg je door syntax highlighting beter inzicht in je mogelijke fouten. Of je kunt overwegen om bijvoorbeeld Netbeans IDE of Visual Studio Code te gebruiken; die zijn een stuk uitgebreider maar wijzen je ook op fouten in je syntax.

Voor database werk kan ik MySQL Workbench aanbevelen.

Allemaal gratis programma's trouwens.
"Knowledge speaks, but wisdom listens."
- Jimi Hendrix -

Berichten: 41

Re: SELECT query MariaDB verwerkt als string in PHP

Ger schreef: ma 02 dec 2019, 08:59 Als je de procedurele stijl gebruikt bij mysqli_* functies, dan moet je inderdaad de parameter volgorde gebruiken die @Benm benoemt.

Verder lijkt het erop dat deze query mis gaat door een single quote teveel op het eind:

Code: Selecteer alles

$query_string = "SELECT FearID FROM fears'";
in SQL wordt dat dus:

Code: Selecteer alles

SELECT FearID FROM fears'
En dat levert inderdaad een MySQL error op.
Inderdaad, het lukte maar niet om de query voor elkaar te krijgen en ik dacht oprecht dat het aan mijn SQL syntax lag, hierdoor heb ik veel veranderd om te kijken of ik het nog kon laten werken. Dit in combinatie met het foute gebruik van mysqli_query, leverde de foutmelding op!

Bedankt voor de extra verheldering! :)

Gebruikersavatar
Berichten: 17.659

Re: SELECT query MariaDB verwerkt als string in PHP

Zie mijn PS hierboven. :)
"Knowledge speaks, but wisdom listens."
- Jimi Hendrix -

Berichten: 41

Re: SELECT query MariaDB verwerkt als string in PHP

Oh super tip, bedankt!

Ik gebruik momenteel Notepad++ precies om die redenen, voorheen met Java en PHP werkte dit perfect maar ik ga me eens verdiepen in Workbench.

Ik vind het namelijk best lastig dat SQL steeds weergegeven wordt als een string icm PHP in Notepad++.

Berichten: 12.262

Re: SELECT query MariaDB verwerkt als string in PHP

Scherp gezien van die extra quote!

Wat editors betreft: heb jij iets dat zowel syntax van php als sql highlight in hetzelfde bestand? Ik gebruik zelf meestal Komodo edit, dat werkt lekker voor php, maar inline sql doet het verder niets mee. Ik vraag me af hoe/of een editor kan zien dat een string sql is - tenzij je die misschien direct in een mysqli_ functie invoert en dat de herkenning is?

Gebruikersavatar
Berichten: 17.659

Re: SELECT query MariaDB verwerkt als string in PHP

Niet. Een string is een string, ongeacht wat je erin gooit.

Echter, veelal maak ik gebruik van een framework met een query builder waarbij je diverse elementen van je query in aparte functies opbouwt. Bijvoorbeeld Doctrine in Symfony of de ingebakken query builder van CodeIgniter.

Als je echt complexe queries in een string gaat proppen, moet je gewoon zorgen dat je goed bent in debuggen. :P
"Knowledge speaks, but wisdom listens."
- Jimi Hendrix -

Berichten: 12.262

Re: SELECT query MariaDB verwerkt als string in PHP

Ah, dacht ik al... als ze echt complex worden test ik ze meestal wel met phpmyadmin - dan geeft wel syntax highlighting voor de sql.

Reageer