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.

<?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();

?>
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.
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.

[size=xsmall]Toevoeging op 19/10/2021 15:21:23:[/size]

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
@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.
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. ;-)
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.
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.



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.
Wat dacht je van:

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:
SELECT `gebruiker`.`naam` WHERE `gebruiker`.`nummer` = $1

Ieder z'n meug.
en dat zou ik dan schrijven als


SELECT gebruiker.naam WHERE gebruiker.nummer = 1;


persoonlijk krijg ik wat last met lezen als er zoveel van die ```` door de tekst staan.
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.
Even een terloops vraagje. Welke editor gebruiken jullie. Momenteel gebruik ik Notepad++. Zijn er betere?

Reageren