Foutmelding bij Insert

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Ignace Verschaeve

Ignace Verschaeve

19/10/2021 14:40:48
Quote Anchor link
Ik zit terug vast met mijn PHP. Update lukt mij nu maar Insert lukt nu niet.
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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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();

?>
Gewijzigd op 19/10/2021 14:46:47 door Ignace Verschaeve
 
PHP hulp

PHP hulp

23/11/2024 13:25:27
 
Adoptive Solution

Adoptive Solution

19/10/2021 15:19:46
Quote Anchor link
Als ‘IDR’ auto increment is, hoef je dat niet te op te nemen in de query.
Verwijder in regel 31 ‘IDR’ en verwijder regel 33.
 
Ivo P

Ivo P

19/10/2021 15:20:10
Quote Anchor link
De foutmelding zegt:
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
 
Ignace Verschaeve

Ignace Verschaeve

19/10/2021 19:18:20
Quote Anchor link
@Ivo P
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)
PHP script in nieuw venster Selecteer het PHP script
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
 

20/10/2021 12:05:57
Quote Anchor link
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.
 
Ivo P

Ivo P

20/10/2021 13:59:48
Quote Anchor link
eh ja.
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)
PHP script in nieuw venster Selecteer het PHP script
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.
 

20/10/2021 16:44:25
Quote Anchor link
Wat dacht je van:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT `user`.`name` WHERE `user`.`id` = $1

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT `gebruiker`.`naam` WHERE `gebruiker`.`nummer` = $1

Ieder z'n meug.
Gewijzigd op 20/10/2021 16:44:58 door
 
Ivo P

Ivo P

20/10/2021 16:49:31
Quote Anchor link
en dat zou ik dan schrijven als

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT gebruiker.naam WHERE gebruiker.nummer = 1;


persoonlijk krijg ik wat last met lezen als er zoveel van die ```` door de tekst staan.
 

20/10/2021 20:25:30
Quote Anchor link
Snap ik, dat geldt voor de meeste mensen. Het is ook meer werk om te typen, het neemt meer ruimte in. Staat een beetje raar bij de aanroep van functies, dus ik doe het ook niet altijd consequent.
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.
 
Jan R

Jan R

21/10/2021 07:20:38
Quote Anchor link
offtopic
Ivo P op 20/10/2021 13:59:48:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
DELETE FROM `WHERE` WHERE `FROM` = `ORDER` AND `OR` < 0 NOR `DELETE` = `NULL` AND `UPDATE` IS NULL;


doet me denken aan http://www2.imm.dtu.dk/courses/02161/2018/files/how_to_write_unmaintainable_code.pdf
 
Ignace Verschaeve

Ignace Verschaeve

21/10/2021 07:53:28
Quote Anchor link
Even een terloops vraagje. Welke editor gebruiken jullie. Momenteel gebruik ik Notepad++. Zijn er betere?
 
- Ariën  -
Beheerder

- Ariën -

21/10/2021 08:05:21
Quote Anchor link
Misschien is dit voer voor een nieuw topic? ;-)
 
Jan R

Jan R

21/10/2021 08:32:38
 

21/10/2021 11:03:00
Quote Anchor link
Ik ben voor Elipse gegaan.

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.
 
Jan R

Jan R

21/10/2021 11:27:46
Quote Anchor link
zowel np++ als visual studio code kan dat ook allemaal.
np++ is lichter en vsc dan nog zwaarder
 
Ward van der Put
Moderator

Ward van der Put

21/10/2021 15:31:29
Quote Anchor link
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.
 

22/10/2021 10:49:26
Quote Anchor link
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

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.
 
Ozzie PHP

Ozzie PHP

22/10/2021 12:16:09
Quote Anchor link
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.
 

22/10/2021 12:40:17
Quote Anchor link
Ik zeg alleen dat je met een keuze van een IDE / texteditor voor alleen Windows, je verder moet kijken dan je huidige Windows 10, Windows 11 en de controverse er van staan aan de voordeur.
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 :-)
 
Rob Doemaarwat

Rob Doemaarwat

22/10/2021 14:29:12
Quote Anchor link
Ward had het over MS Visual Studio Code. Dat is net wat anders als Visual Studio. Misschien haal je dus wat door elkaar.

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").
 
Ozzie PHP

Ozzie PHP

22/10/2021 15:15:30
Quote Anchor link
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.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.