Foutmelding bij Insert
Dit is mijn foutmelding:
Error inserting record: 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 ''IDR',`Naam`, `Voornaam`, `geb_datum`, `GebGemeente`, `overl_datum`, `OverlGe...' at line 2
Hier volgt mijn code, ik zie de fout niet (komma, spatie, back ticks?). Misschien nog bij vermelden IDR (recordnummer) is auto increment.
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?php
//Inladen van de instellingen.
include '../instellingen.php';
$conn = new mysqli($database_adres, $database_login_naam, $database_login_wachtwoord, $database_naam);
//connectie testen
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$Nummer='"0"';
$Naam=mysqli_real_escape_string($conn,$_POST['Naam']);
$VNaam=mysqli_real_escape_string($conn,$_POST['Voornaam']);
$gebdat=mysqli_real_escape_string($conn,$_POST['Geboortedatum']);
$gebpl=mysqli_real_escape_string($conn,$_POST['Geboorteplaats']);
$overldat=mysqli_real_escape_string($conn,$_POST['Overlijdensdatum']);
$overlpl=mysqli_real_escape_string($conn,$_POST['Overlijdensplaats']);
$Type=mysqli_real_escape_string($conn,$_POST['Type']);
$BS=mysqli_real_escape_string($conn,$_POST['BS']);
$Naam2=mysqli_real_escape_string($conn,$_POST['Naam2']);
$VNaam2=mysqli_real_escape_string($conn,$_POST['Voornaam2']);
$verzameling=mysqli_real_escape_string($conn,$_POST['verzameling']);
$bestandsnaam=mysqli_real_escape_string($conn,$_POST['bestandsnaam']);
$opmerk=mysqli_real_escape_string($conn, $_POST['Opmerking']);
$map='"bbb/uploadsRB/"';
$site='"fv-vl-ardennen.be/"';
$collectie='"---"';
$sql = "INSERT INTO RB_BP_upload
('IDR',`Naam`, `Voornaam`, `geb_datum`, `GebGemeente`, `overl_datum`, `OverlGemeente`, 'site', 'map', 'bestandsnaam`, `verzameling`, `Type`, `BS`, `Naam2`, `VNaam2`, `Opmerking`, 'collectie')
VALUES (
'" . $Nummer . "',
'" . $Naam . "',
'" . $VNaam . "',
'" . $gebdat . "',
'" . $gebpl . "',
'" . $overldat . "',
'" . $overlpl . "',
'" . $site . "',
'" . $map . "',
'" . $bestandsnaam . "',
'" . $verzameling . "',
'" . $Type . "',
'" . $BS . "',
'" . $Naam2 . "',
'" . $VNaam2 . "',
'" . $opmerk . "',
'" . $collectie . "')";
if (mysqli_query($conn, $sql)) {
echo "Record succesvol bijgevoegd";
} else {
echo "Error inserting record: " . mysqli_error($conn);
}
// Sluit de MySQL verbinding.
$conn->close();
?>
//Inladen van de instellingen.
include '../instellingen.php';
$conn = new mysqli($database_adres, $database_login_naam, $database_login_wachtwoord, $database_naam);
//connectie testen
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$Nummer='"0"';
$Naam=mysqli_real_escape_string($conn,$_POST['Naam']);
$VNaam=mysqli_real_escape_string($conn,$_POST['Voornaam']);
$gebdat=mysqli_real_escape_string($conn,$_POST['Geboortedatum']);
$gebpl=mysqli_real_escape_string($conn,$_POST['Geboorteplaats']);
$overldat=mysqli_real_escape_string($conn,$_POST['Overlijdensdatum']);
$overlpl=mysqli_real_escape_string($conn,$_POST['Overlijdensplaats']);
$Type=mysqli_real_escape_string($conn,$_POST['Type']);
$BS=mysqli_real_escape_string($conn,$_POST['BS']);
$Naam2=mysqli_real_escape_string($conn,$_POST['Naam2']);
$VNaam2=mysqli_real_escape_string($conn,$_POST['Voornaam2']);
$verzameling=mysqli_real_escape_string($conn,$_POST['verzameling']);
$bestandsnaam=mysqli_real_escape_string($conn,$_POST['bestandsnaam']);
$opmerk=mysqli_real_escape_string($conn, $_POST['Opmerking']);
$map='"bbb/uploadsRB/"';
$site='"fv-vl-ardennen.be/"';
$collectie='"---"';
$sql = "INSERT INTO RB_BP_upload
('IDR',`Naam`, `Voornaam`, `geb_datum`, `GebGemeente`, `overl_datum`, `OverlGemeente`, 'site', 'map', 'bestandsnaam`, `verzameling`, `Type`, `BS`, `Naam2`, `VNaam2`, `Opmerking`, 'collectie')
VALUES (
'" . $Nummer . "',
'" . $Naam . "',
'" . $VNaam . "',
'" . $gebdat . "',
'" . $gebpl . "',
'" . $overldat . "',
'" . $overlpl . "',
'" . $site . "',
'" . $map . "',
'" . $bestandsnaam . "',
'" . $verzameling . "',
'" . $Type . "',
'" . $BS . "',
'" . $Naam2 . "',
'" . $VNaam2 . "',
'" . $opmerk . "',
'" . $collectie . "')";
if (mysqli_query($conn, $sql)) {
echo "Record succesvol bijgevoegd";
} else {
echo "Error inserting record: " . mysqli_error($conn);
}
// Sluit de MySQL verbinding.
$conn->close();
?>
Gewijzigd op 19/10/2021 14:46:47 door Ignace Verschaeve
Verwijder in regel 31 ‘IDR’ en verwijder regel 33.
er is een fout in de nabijheid van ''IDR',`Naam`, `Voornaam` ....
dus zoek je dat stuk op in de query.
Daar zie je dus dat er quotes staan om de kolomnaam IDR.
Die horen daar niet. Om onduidelijke redenen zetten sommige mensen allerlei backtics om kolomnamen. Dat mág.
Maar single quotes dus niet.
Toevoeging op 19/10/2021 15:21:23:
en als je verder kijkt in de query (druk tijdens het typen eens af en toe op <enter>)
dan zie je nog een paar kolomnamen tussen quotes
Hartelijk dank, je gaf mij de oplossing. Door mijn zicht die niet meer 100% is zag ik het verschil tussen de backtics en single quotes niet. Die backtics zijn er gekomen omdat ik de query had overgenomen uit PHP myAdmin.
Code (php)
1
INSERT INTO `RB_BP_upload`(`IDR`, `Naam`, `Voornaam`, `geb_datum`, `GebGemeente`, `overl_datum`, `OverlGemeente`, `site`, `map`, `bestandsnaam`, `verzameling`, `Type`, `BS`, `Naam2`, `VNaam2`, `Opmerking`, `collectie`) VALUES ('[value-1]','[value-2]','[value-3]','[value-4]','[value-5]','[value-6]','[value-7]','[value-8]','[value-9]','[value-10]','[value-11]','[value-12]','[value-13]','[value-14]','[value-15]','[value-16]','[value-17]')
Maar door te prutsen was er een deel verloren gegaan en ik zag niet het verschil tussen quote en Backtics. Heel erg bedankt, dikke duim. Het werkt nu en ik heb weeral wat bijgeleerd. Ik weet nu ook waar die backtic nu op mijn toetsenbord staat. ;-)
Gewijzigd op 19/10/2021 19:19:22 door Ignace Verschaeve
Ivo P op 19/10/2021 15:20:10:
Om onduidelijke redenen zetten sommige mensen allerlei backtics om kolomnamen.
De reden is heel duidelijk: om identifiers te kunnen escapen, voor exotischer namen en om onderscheid te maken tussen andere statements. Stel je hebt een kolomnaam user, dan moet je die escapen met backticks, anders denkt mysql dat het een gereserveerd statement is.
https://dev.mysql.com/doc/refman/8.0/en/identifiers.html
Bijkomend voordeel is, dat als je ooit kolomnamen moet vervangen in queries, het eenvoudiger werkt met een 'zoek en vervang'-actie als alle identifiers omringd zijn met backticks.
ik weet inmiddels echt wel wat het effect is van die dingen.
Ik bedoel vooral dat het ook gedaan wordt waar het niet nodig is (om compleet valide kolom- of tabelnamen), maar omdat het onbewust gedaan wordt, valt het ook niemand op als er gereserveerd woorden worden gebruikt of spaties in kolomnamen gezet worden.
En dan kom je dus ooit een keer op een punt waar de query niet copy-paste uit "phpmyadmin" is gehaald en er foutmeldingen optreden omdat nu de kolomnaam "order" of "from" eens niet tussen backtics staat.
Ik ben van mening dat je ze achterwege moet laten en als je een gereserveerd woord als kolomnaam wilt inzetten, dan kies je maar iets beters.
Code (php)
1
DELETE FROM `WHERE` WHERE `FROM` = `ORDER` AND `OR` < 0 NOR `DELETE` = `NULL` AND `UPDATE` IS NULL;
Als voorbeeld van een onduidelijke query door gebruik van bekende SQL-termen als kolom- of tabelnaam.
En er is vast ook wel een variant te bedenken die bij het missen van de backtics ineens iets heel anders doet dan een select-query.
USER is gereserveerd in MySQL en andere databases. Terwijl het ook breder jargon is.
Persoonlijk ben ik voorstander voor Nederlandse naamgeving, dan is er maar weinig kans op conflicten:
Ieder z'n meug.
persoonlijk krijg ik wat last met lezen als er zoveel van die ```` door de tekst staan.
Anderzijds zijn het onmiskenbaar identifiers, dus strikter, syntaxkleurtjes gaan altijd goed, en als ik een find-replace doe weet ik sneller wanneer ik klaar ben. In mijn code komt SQL voor samen met PHP, waardoor bij refactoren een vergissing met $gebruiker, $naam of $nummer snel is gemaakt. Die backticks voorkomen dat.
Ben wel benieuwd naar jullie copingstrategie daarvoor.
Ivo P op 20/10/2021 13:59:48:
doet me denken aan http://www2.imm.dtu.dk/courses/02161/2018/files/how_to_write_unmaintainable_code.pdf
Even een terloops vraagje. Welke editor gebruiken jullie. Momenteel gebruik ik Notepad++. Zijn er betere?
Misschien is dit voer voor een nieuw topic? ;-)
Voor mij zijn de voordelen dat het alles kan voor elke versie van elke programmeertaal, inclusief databases, Git-integratie, etc. Echt alles is te configureren, alles werkt via menu's in plaats van commando's. Je hoeft nooit meer te wennen aan een andere IDE want het draait op zowat elk besturingssysteem. Eclipe is open source, komt van een gerenommeerde partij (IBM) en heeft een grote user base. Heeft allemaal extra functies die het werk makkelijker maken, is eenvoudig uit te breiden via plug-ins als je nog iets mist.
De keerzijde van het alles kunnen is dat je er een beetje stevige computer voor nodig hebt. Er zijn mensen die Eclipse overvolledig vinden en traag. Ik heb een inmiddels wat oudere i7 met 16GB RAM die het al jaren prima trekt.
np++ is lichter en vsc dan nog zwaarder
Ignace Verschaeve op 21/10/2021 07:53:28:
Welke editor gebruiken jullie.
Visual Studio Code
Ad Fundum op 20/10/2021 20:25:30:
In mijn code komt SQL voor samen met PHP, waardoor bij refactoren een vergissing met $gebruiker, $naam of $nummer snel is gemaakt. Die backticks voorkomen dat. Ben wel benieuwd naar jullie copingstrategie daarvoor.
Dat doe ik vooral via een andere combinatie van hoofdletters, kleine letters en underscores. In SQL komen uitsluitend foo_bars en foo_bar voor, terwijl FOO_BAR, FooBar en fooBar alleen voorkomen in PHP. De functies van VS Code heb ik daarom ook bijna permanent op case sensitive staan.
Jan R op 21/10/2021 11:27:46:
zowel np++ als visual studio code kan dat ook allemaal.
np++ is lichter en vsc dan nog zwaarder
np++ is lichter en vsc dan nog zwaarder
Dat klopt niet.
Het begint er al mee dat (volgens de download-pagina van Notepad++ en die van MS Visual Studio) die dingen alleen Windows werken, en niet op alle andere PC's.
Daarbij lijkt het me sterk dat Notepad++ hetzelfde kan als een volledige IDE als Eclipse. Kan Notepad++ code formatteren? (je kiest een PSR-nummer en je klikt op een knop en al je code staat meteen goed) Of kan je een sneltoetscombinatie invoeren waarna al je require's goed staan?
Kan je doorklikken vanuit functies? Zijn er tools voor refactoring? Kan je zelfs ook maar verbinden met een database vanuit Notepad++?
MSVC zal qua functionaliteit redelijk in pas lopen met Eclipse en vice-versa. Maar dan krijg je alle Microsoft rommel erbij en je zit aan Windows 10, en straks 11 vast. Niet echt een leuk vooruitzicht lijkt me. Tenzij je dingen als verplicht TPM en te vroeg afschrijven van je hardware door Microsoft geen probleem vindt / niet over na wil denken.
Ad Fundum op 22/10/2021 10:49:26:
Maar dan krijg je alle Microsoft rommel erbij en je zit aan Windows 10, en straks 11 vast. Niet echt een leuk vooruitzicht lijkt me. Tenzij je dingen als verplicht TPM en te vroeg afschrijven van je hardware door Microsoft geen probleem vindt / niet over na wil denken.
Waarom nu weer het bashen van Windows? Laat mensen lekker kiezen waar ze zich zelf prettig bij voelen. Een TPM dient voor extra veiligheid dus ik zie sowieso niet in waarom je daar zo op afgeeft. En als je geen separate TPM-chip van pakweg 15 à 20 euro wil aanschaffen, dan zit er tegenwoordig bijna op ieder moederbord fTPM ingebakken. Hele volksstammen draaien op Windows. De een vindt het prettig, de ander geeft de voorkeur aan een ander OS. Allemaal prima. Laat iedereen z'n eigen keuze maken en respecteer dat. Dit gebash voegt weinig toe.
Windows 10 wordt per 14-10-2025 afgeschreven.
Ondertussen kan ik geen enkele PC die ik thuis heb, zelfs niet mijn i7 of recente Intel NUC, met Windows 11 laten draaien, omdat de gekochte processoren niet zullen werken:
https://docs.microsoft.com/nl-nl/windows-hardware/design/minimum/supported/windows-11-supported-intel-processors
Concreet betekent het dat er een kostenpost aankomt van zo'n 3000 euro, terwijl ik mijn perfect werkende apparatuur mag laten verzenden naar Afrika. Tenzij ik overstap op een ander besturingssysteem. Maar dan moet je IDE / teksteditor daar ook op aansluiten, tenzij je wilt programmeren vanuit een VM.
Verder kan ik anderen er niet van weerhouden om hun eigen keuzes te maken, en dat is maar goed ook, ik ben druk genoeg :-)
VS Code kun je ook op Linux installeren: https://code.visualstudio.com/docs/setup/linux (en draait dan ook gewoon mee in je update / upgrade). Happy user hier (met wat PHP specifieke plugins, en Mercurial versiebeheer ook vanuit de editor).
Sinds gisteren kun je VS code ook in je browser draaien: https://vscode.dev/ ! (zelf zie ik het vooral als "leuk voor onderweg" - lokaal wil ik nog gewoon een "echte applicatie").
Ad Fundum op 22/10/2021 12:40:17:
Windows 10 wordt per 14-10-2025 afgeschreven.
Dus kun je nog sowieso 4 jaar vooruit ;-) Techniek en software veranderen dagelijks, dus dat je af en toe zult moeten upgraden daar ontkom je niet aan. En meestal is het zo dat iemand ergens voor kiest en daar bij blijft. Dus een Windows-gebruiker blijft bij Windows. Een Linux-gebruiker blijft bij Linux en een Apple-gebruiker blijft bij Apple. Dat is dus sowieso al iets waar je rekening mee moet houden bij de aanschaf van alle software die je gebruikt. De kans lijkt me bijzonder klein dat iemand ineens van besturingssysteem gaat wisselen vanwege incompatibiliteit met een editor. Nee, de logische weg is dat je een editor zoekt die past bij je OS. En dat je soms zult moeten upgraden dat weet je op voorhand.