Mysqli_error()
Code (php)
1
"mysqli_error() expects exactly 1 argument, 0 given in C:\wamp\www\modellenEdit.php on line 44"
Eerst dacht ik dat ik verboden tekens wilde plaatsen zoals / of dat ik tekst wilde plaatsen in een kolom voor alleen cijfers, maar dat bleek niet het geval te zijn.
Hieronder een deel van het script regel 6 t/m 44.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
"{ //query samenstellen
$queryUpdate =
"UPDATE
modellen
SET
merk = '".$_POST['merk']."',
artikelnummer = '".$_POST['artikel']."',
maatschappij = '".$_POST['maatschappij']."',
soort = '".$_POST['soort']."',
bedrijf = '".$_POST['bedrijf']."',
reeks = '".$_POST['reeks']."',
klasse = '".$_POST['klasse']."',
asindeling = '".$_POST['asindeling']."',
lengte = '".$_POST['lengte']."',
interieur = '".$_POST['interieur']."',
verlichting = '".$_POST['verlichting']."',
tijdperk = '".$_POST['tijdperk']."',
aantal = '".$_POST['aantal']."',
railsysteem = '".$_POST['railsysteem']."',
stroomsoort = '".$_POST['stroomsoort']."',
wielmerk = '".$_POST['wielmerk']."',
wieldiameter = '".$_POST['wieldiameter']."',
wielaslengte = '".$_POST['wielaslengte']."',
motor = '".$_POST['motor']."',
gemotoriseerd = '".$_POST['gemotoriseerd']."',
decoder = '".$_POST['decoder']."',
protocol = '".$_POST['protocol']."',
adres = '".$_POST['adres']."',
consist_adres = '".$_POST['consistadres']."',
bijzonderheden = '".$_POST['bijzonder']."',
extra_informatie = '".$_POST['extra']."',
modelinfo = '".$_POST['modelinfo']."',
categorie = '".$_POST['categorie']."',
afbeelding = '".$_POST['afbeelding']."',
OVP = '".$_POST['ovp']."',
start_set = '".$_POST['set']."'
WHERE
id=".$_POST['id'];
$resultEdit = mysqli_query($db, $queryUpdate) or die("Wijzigen is niet gelukt.<br />" . mysqli_error() . "<br /> Query: " . $queryUpdate);
$queryUpdate =
"UPDATE
modellen
SET
merk = '".$_POST['merk']."',
artikelnummer = '".$_POST['artikel']."',
maatschappij = '".$_POST['maatschappij']."',
soort = '".$_POST['soort']."',
bedrijf = '".$_POST['bedrijf']."',
reeks = '".$_POST['reeks']."',
klasse = '".$_POST['klasse']."',
asindeling = '".$_POST['asindeling']."',
lengte = '".$_POST['lengte']."',
interieur = '".$_POST['interieur']."',
verlichting = '".$_POST['verlichting']."',
tijdperk = '".$_POST['tijdperk']."',
aantal = '".$_POST['aantal']."',
railsysteem = '".$_POST['railsysteem']."',
stroomsoort = '".$_POST['stroomsoort']."',
wielmerk = '".$_POST['wielmerk']."',
wieldiameter = '".$_POST['wieldiameter']."',
wielaslengte = '".$_POST['wielaslengte']."',
motor = '".$_POST['motor']."',
gemotoriseerd = '".$_POST['gemotoriseerd']."',
decoder = '".$_POST['decoder']."',
protocol = '".$_POST['protocol']."',
adres = '".$_POST['adres']."',
consist_adres = '".$_POST['consistadres']."',
bijzonderheden = '".$_POST['bijzonder']."',
extra_informatie = '".$_POST['extra']."',
modelinfo = '".$_POST['modelinfo']."',
categorie = '".$_POST['categorie']."',
afbeelding = '".$_POST['afbeelding']."',
OVP = '".$_POST['ovp']."',
start_set = '".$_POST['set']."'
WHERE
id=".$_POST['id'];
$resultEdit = mysqli_query($db, $queryUpdate) or die("Wijzigen is niet gelukt.<br />" . mysqli_error() . "<br /> Query: " . $queryUpdate);
Is de variabele $queryUpdate leeg? Is de syntaxis van mysqli_query verkeerd?
$db is niet leeg, daar kreeg ik geen error van.
De error luidt:
"mysqli_error() expects exactly 1 argument, 0 given in C:\wamp\www\modellenEdit.php on line 44"
Hier staat precies wat er aan de hand is. De functie mysqli_error() verwacht 1 argument, maar er zijn 0 argumenten doorgegeven. Dat klopt, want in jouw code staat:
or die("Wijzigen is niet gelukt.<br />" . mysqli_error() ... => mysqli_error bevat geen argument
Op deze manier kun je een heleboel errors dus zelf oplossen. Gewoon even goed lezen wat er in de foutmelding staat.
Gewijzigd op 21/10/2024 14:45:35 door - Ariën -
Dat de functie 1 argument verwacht, dat zie ik ook wel. Maar welk argument??? That's the question.
Eén minuut eerder had ik het edit-formulier ingevuld, de update verliep probleemloos, en als ik dezelfde "kaart" (of rij) oproep om te bewerken staan de meeste data er weer, maar sommige zijn weer weg. Daar gaat dus iets fout.
Neem ik een andere rij, ik roep die op om te bewerken (edit) maar laat hem omgewijzigd, dan krijg ik dezelfde foutmelding. Aan het script heb ik echter niets veranderd. Dus ik snap het niet. Where is the problem?
En, Ariën, het heeft ook niet de bedoeling kraaksafe te zijn. Puur hobby-matig. Blijft op localhost, gaat niet internet op. Als zelfs de politie-database niet safe bleek te zijn ... wat verwacht je dan wel niet van een amateur? Meer dan dit was ik niet van plan te maken. Ik verwachtte een andere toon op dit forum dan meteen waarschuwen voor het allerergste. Sorry hoor, dat moest me even van hart.
Gewijzigd op 21/10/2024 15:09:10 door Guus Wiegerinck
Guus Wiegerinck op 21/10/2024 15:08:13:
Ik ben niet dom, hoor, Ozzie. Jouw toon vind ik een beetje laatdunkend.
We houden het toch wel gezellig hier, hé? :-)
Quote:
Dat de functie 1 argument verwacht, dat zie ik ook wel. Maar welk argument??? That's the question.
Het argument die mysql_error() verbindt met de connectie. Zie ook mysqli_error voor verdere uitleg over deze functie.
Quote:
En, Ariën, het heeft ook niet de bedoeling kraaksafe te zijn. Puur hobby-matig. Blijft op localhost, gaat niet internet op. Als zelfs de politie-database niet safe bleek te zijn ... wat verwacht je dan wel niet van een amateur? Meer dan dit was ik niet van plan te maken. Ik verwachtte een andere toon op dit forum dan meteen waarschuwen voor het allerergste. Sorry hoor, dat moest me even van hart.
Als je goed leest kan je ook met goede bedoelingen je query vast laten lopen door tekens te gebruiken die niet ge-escaped worden. Dus daarom raad ik met klem aan om naar mysqli_real_escape_string te kijken. Of anders kan je ook verdiepen in 'prepared statements'.
Gewijzigd op 21/10/2024 15:12:53 door - Ariën -
- Ariën - op 21/10/2024 15:12:10:
Als je goed leest kan je ook met goede bedoelingen je query vast laten lopen door tekens te gebruiken die niet ge-escaped worden. Dus daarom raad ik met klem aan om naar mysqli_real_escape_string te kijken. Of anders kan je ook verdiepen in 'prepared statements'.
Als je goed leest kan je ook met goede bedoelingen je query vast laten lopen door tekens te gebruiken die niet ge-escaped worden. Dus daarom raad ik met klem aan om naar mysqli_real_escape_string te kijken. Of anders kan je ook verdiepen in 'prepared statements'.
Dank voor je reactie. Je wijst me op iets wat best zou kunnen gebeuren, en waar ik dus alert op moet zijn.
Geldt dat ook voor tekens die we in een eerder topic over collatie hebben ondervangen??? Zoals woorden als Märklin of vóór of geel/wit? Die destijds, ruim 4 jaar geleden, bij het maken van een nieuwe rij probleemloos uit de database zijn gehaald en met INSERT zijn verzonden, maar nu met UPDATE een probleem zouden kunnen worden / zijn?
Dit heeft niks met collaties te maken, maar met tekens die in queries gebruikt worden, zoals de apostrof en nog een paar.
- Ariën - op 21/10/2024 15:12:10:
Het argument die mysql_error() verbindt met de connectie. Zie ook mysqli_error voor verdere uitleg over deze functie.
Verbinden ... hmm. Komt de verbinding met de database niet tot stand bij het UPDATEn?
Op regel 2 van edit-script staat:
In dat inc_connect_db.php staat dan:
Code (php)
1
2
3
2
3
$db = mysqli_connect("localhost", "root", "knip", "mijntreinenverzameling");
$db->set_charset("utf8mb4");
$db->query("SET NAMES utf8mb4 COLLATE utf8mb4_general_ci");
$db->set_charset("utf8mb4");
$db->query("SET NAMES utf8mb4 COLLATE utf8mb4_general_ci");
Op regel 44 van het edit script staat o.a.
Code (php)
1
$resultEdit = mysqli_query($db, $queryUpdate) or die("Wijzigen is niet gelukt.<br />" . mysqli_error() . "<br /> Query: " . $queryUpdate);
Die $db, mag ik aannemen of die dezelfde waarde heeft als op regel 2??
Of moet die dan opnieuw gedefinieerd worden?
Gewijzigd op 21/10/2024 16:17:13 door - Ariën -
Dat is inderdaad $db wat je moet toepassen in je mysqli_error( ).
Guus Wiegerinck op 21/10/2024 15:08:13:
Ik ben niet dom, hoor, Ozzie. Jouw toon vind ik een beetje laatdunkend.
Zucht, waarom nou weer op deze manier reageren? Je geeft zelf aan dat er een error is waar je, gezien de opmerking die je plaatst, niks van begrijpt. Je plaatst een compleet overbodige lap code. Ik leg je vervolgens netjes uit hoe je zelf een errormelding kunt leren begrijpen, iets waar je de rest van je leven wat aan hebt. Krijg ik zo'n reactie. Erg jammer. Daar laat ik het maar bij.
Ozzie PHP op 21/10/2024 16:24:38:
Zucht, waarom nou weer op deze manier reageren? Je geeft zelf aan dat er een error is waar je, gezien de opmerking die je plaatst, niks van begrijpt. Je plaatst een compleet overbodige lap code. Ik leg je vervolgens netjes uit hoe je zelf een errormelding kunt leren begrijpen, iets waar je de rest van je leven wat aan hebt. Krijg ik zo'n reactie. Erg jammer. Daar laat ik het maar bij.
Guus Wiegerinck op 21/10/2024 15:08:13:
Ik ben niet dom, hoor, Ozzie. Jouw toon vind ik een beetje laatdunkend.
Zucht, waarom nou weer op deze manier reageren? Je geeft zelf aan dat er een error is waar je, gezien de opmerking die je plaatst, niks van begrijpt. Je plaatst een compleet overbodige lap code. Ik leg je vervolgens netjes uit hoe je zelf een errormelding kunt leren begrijpen, iets waar je de rest van je leven wat aan hebt. Krijg ik zo'n reactie. Erg jammer. Daar laat ik het maar bij.
De vraag of ik Engels ken, bijvoorbeeld. Dat vond ik laatdunkend.
En waar ik niks van begrijp ... Ik was misschien niet helder met wat ik bedoelde - ik begreep best dat er een argument miste, maar wélk argument? Wát er ineens fout zou kunnen zijn aan mijn script? Het scripte werkte al jaren goed, en nu ineens ... dát begreep ik niet.
Maar goed, zand erover. Tekst en gevoelens, dat is soms lastig.
Gewijzigd op 21/10/2024 16:54:50 door Guus Wiegerinck
Guus Wiegerinck op 21/10/2024 16:53:51:
De vraag of ik Engels ken, bijvoorbeeld. Dat vond ik laatdunkend.
Dat is dan jouw eigen opvatting. Er bestaan gewoon mensen die geen Engels spreken, en in zo'n geval kan ik me voorstellen dat een foutmelding lastig(er) te interpreteren is.
Guus Wiegerinck op 21/10/2024 16:53:51:
En waar ik niks van begrijp ... Ik was misschien niet helder met wat ik bedoelde - ik begreep best dat er een argument miste, maar wélk argument?
Dan is dat dus de vraag die je zou kunnen stellen. Welk argument mist hier. Tegelijkertijd kun je via php.net/hier-de-naam-van-de-functie informatie over alle functies terugvinden. Ook welk argument er verwacht wordt. Dat is dus een tip voor een volgende keer.
Guus Wiegerinck op 21/10/2024 16:53:51:
Maar goed, zand erover. Tekst en gevoelens, dat is soms lastig.
We gaan hier op het forum altijd normaal met elkaar om. Er is nooit een reden om aan te nemen dat mensen laatdunkend tegen je doen. Dan weet je dat alvast voor de toekomst. En voor nu inderdaad zand erover.
Dat is dan gezegd. Terug naar de hulpvraag.
Adoptive Solution op 21/10/2024 17:53:42:
Stond er al jaren zo. Toch geprobeerd, en nee, dat is het niet. Foutmelding blijft.
Ik ga aan de slag met de mysqli_error().
https://github.com/arienclaij/sql-boilerplate/tree/master/mysqli/procedural
Hopelijk heb je er wat aan.
Gewijzigd op 21/10/2024 18:57:53 door - Ariën -
Code (php)
1
ArgumentCountError: mysqli_error() expects exactly 1 argument, 0 given in C:wamp\www\modellenEdit.php on line
Ik heb gezocht op count error mysqli_error(). Daar kwm ik tegen dat je een melding krijgt wanneer het aantal velden van de rij die je wilt aanpassen niet klopt met het aantal velden in de database.
Ik ben gaan tellen.
1. Het aantal tabellen/velden in de database is 32, waaronder de Id. (!)
2. Het aantal velden waarin ik de data wil aanpassen is 31 (aha) maar in de WHERE regel staat de Id, nr 32
Vraag is: telt dat ene veld Id, nr 32 dus, in de WHERE regel mee??
Of is het nieuw beleid dat die Id óók vermeld moet worden in te wijzigen velden????
Alleen die melding is bij niet hetzelfde als in het artikel.
In het artikel: Column count doesn't match value count at row 1
In mijn geval: mysqli_error().
Ben bang dat dit het niet is.
Blijft over de verbinding met de database als het ene argument dat gemist wordt. Ik begrijp echter niet hoe je iets met $db in $Msqli_error kunt doen. Als $db leeg is op regel met
moet ik dan bovenin opnieuw $db declareren??
Gewijzigd op 21/10/2024 19:41:06 door Guus Wiegerinck
Ter vergelijking: Je probeert 1,25 liter melk te gieten in een liter-pak. En dat past niet.
Protip, maar niet verplicht: Misschien kan je je verdiepen in databasenormalisatie, als je jouw applicatie schaalbaar wilt houden. Dan kan je dit beperken tot een minimaal aantal velden, en het gebruik van een koppeltabel en een met alle eigenschappen.
Gewijzigd op 21/10/2024 19:37:32 door - Ariën -
Dus moet ik het veld Id toevoegen aan de te wijzigen aantal velden. Maar de waarde wel ongewijzigd houd!!@
Een ID hoor je normaal gesproken niet te wijzigen. Laat eens wat relevante code zien?
Guus Wiegerinck op 21/10/2024 19:20:58:
Ik heb nog eens goed gekeken naar de foutmelding. Dit staat er voluit:
Ik heb gezocht op count error mysqli_error(). Daar kwm ik tegen dat je een melding krijgt wanneer het aantal velden van de rij die je wilt aanpassen niet klopt met het aantal velden in de database.
Ik ben gaan tellen.
...
Code (php)
1
ArgumentCountError: mysqli_error() expects exactly 1 argument, 0 given in C:wamp\www\modellenEdit.php on line
Ik heb gezocht op count error mysqli_error(). Daar kwm ik tegen dat je een melding krijgt wanneer het aantal velden van de rij die je wilt aanpassen niet klopt met het aantal velden in de database.
Ik ben gaan tellen.
...
- Ariën - op 21/10/2024 19:29:46:
Het aantal velden wat je wilt toevoegen of bijwerken komt niet overeen met het aantal waardes ervan.
Oké, hier gaat toch even wat fout nu. Ik had toch duidelijk aangegeven wat de errormelding inhoudt? Maar vervolgens ga je alsnog met zoekwoorden op zoek om vervolgens tot een foute "conclusie" te komen. En vervolgens borduurt Ariën verder op die onjuiste aanname. Het is pas maandag ... scherp blijven mensen! :-)
Nogmaals er ontbreekt een argument in jouw code bij mysqli_error().
Maak van dit stukje:
or die("Wijzigen is niet gelukt.<br />" . mysqli_error()
eens dit:
or die("Wijzigen is niet gelukt.<br />" . mysqli_error($db)
Hiermee voeg je $db (jouw databaseconnectie) als argument toe.
Laat maar weten wat het resultaat is.