Ik wil een update uitvoeren maar dat lukt - ineens - niet meer. Een update een minuut eerder lukte wel en toen niet meer. Ik krijg de foutmelding
"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.
Ja, normaal sorteer ik op naam zodat ik een mooie alfabetische lijst krijg. Met sorteren op Id wordt het op den duur chaotischer door toevoegen of verwijderen van records. Id gebruik ik eigenlijk alleen voor het koppelen van tabellen, maar ik weet niet of een Idnr als string problemen kan opleveren bij het koppelen. Daarom heb het type van het veld waarmee ik aan het stoeien ben, terug veranderd is INT.
Om ervoor zorgen dat UPDATE niet weer problemen oplevert, heb ik het script aangevuld met een stuk van jouw code. Het ziet er nu zó uit:
Eerst heb ik de waarde van het veld opgehaald uit de database en opgeslagen in $set_id.
Met een selectieformulier ga ik deze waarde weer ongewijzigd opsturen naar de UPDATE-query: $_POST['set'] .
De selectieregel ziet er zó uit:
if (empty ($set_id)) {$Set[] = "<option SELECTED value=\"\">n.v.t.</option>\n"; }
Daarna volgt de UPDATE, met controle
//Controle of bij te werken waarden correct zijn.
$_POST['set'] = ''; // Dit kan een lege string zijn
// Controleer of de variabele leeg is, zo ja, gebruik NULL
$variabele_sql = empty($variabele) ? "NULL" : "'" . mysqli_real_escape_string($variabele) . "'";
$queryUpdate = "UPDATE modellen SET start_set = '".$_POST['set']."'
Helaas, toch weer fout.
Mysqli_error($db) rapporteert: Wijzigen is niet gelukt. Incorrect integer value: '' for column 'start_set' at row 1
Kijk ik in phpMyAdmin dan zie bij betreffende model in veld "startset" een 0 staan. Wil ik die wissen, krijg ik dezelfde foutmelding.
Fout
SQL-query: Kopiëren Wijzigen Wijzigen
UPDATE `modellen` SET `start_set` = '' WHERE `modellen`.`id` = 202
MySQL meldt: Documentatie
#1366 - Incorrect integer value: '' for column 'start_set' at row 1
Wat heb ik niet goed gedaan??? En eigenlijk zou ik die 0 in de tabel graag weg willen hebben en vervangen door NULL. Ik heb er een hard hoofd in of dat wel lukt.
(bij sommige andere modellen staat ook een 0 en bij vele andere NULL Geen idee hoe dat zo gekomen is. Eerder een UPDATE gedaan die toen geen probleem opleverde??? Toen onder Wamp 2.5 met Mysql 5.5.17 en Php 5.5.12)
===========================
Nog een vraag: is de code
Met de juiste instellingen kan je ook een NULL waarde invoegen als INT. Hoe zien de eigenschappen van je tabel eruit?
Het antwoord op je andere vraag: Je kan die verkorte short-hand notatie ook opschrijven als een if-else statement. Zo'n verkorte code heet de ternary operator.
Je kan dan gewoon een NULL gebruiken. Maar die error die je kreeg krijg je omdat je een lege waarde invult. Je kan in MySQL ook doortellen met 'auto increment'. Dan krijgt elk record een oplopend nummer.
Kijk eerst eens wat je query-string doet, door die te echo'en. Ik vermoed dat je 'NULL' invoert, wat een string is, en dus geen NULL. Sowieso hoort dat niet in je HTML, want dan kan iedereen met wat creativiteit zijn eigen meuk invoeren.
De waarde leeglaten kan wel, maar dan moet je dus een controle doen: als de waarde leeg is, voer dan NULL in in je query. En zoals Ariën al aangaf moet NULL dan geen string zijn.
'dit is een string'
'NULL' => dit is ook een string!
NULL => dit is NULL (dus geen string) en dit moet je gebruiken in je query
[size=xsmall]Toevoeging op 26/10/2024 19:29:51:[/size]
Ozzie PHP op 26/10/2024 17:47:08
De waarde leeglaten kan wel, maar dan moet je dus een controle doen: als de waarde leeg is, voer dan NULL in in je query. En zoals Ariën al aangaf moet NULL dan geen string zijn.
etc...
Vandaar mijn tip om je query-string even te echo'en voordat je het uitvoert. Dan weet je precies welke query er aan MySQL gevoerd wordt. Als het inderdaad 'NULL' is, dan weten we dat het niet klopt.
Hoe doe je dat, de query-string echoën? Internet gaf mij geen handvatten.
In mijn reactie dd 25 okt zie je dat ik daar NULL heb gebruikt. Tussen \" weliswaar, en dat werkte niet. NULL was dus toch een string. Die \" (geëscapte ") horen daar, toch?