Bete helpers,

Mijn oude server MacMini is gecrached (hardware fout) met een database van een begraafplaats, ik heb daar nu een raspberry Pi 4 8Mb,
alles php en mysql werken allen ik had nog een oude versie van beide PHP aangepast werkt. kortweg wat doe ik hier als alles werkt.
Ik had, zoals velen gebruiker, problemen met de import van tekst file met de diakritische tekens,
Voor de databse gebruik ik filemaker op een Imac en maak daar een export naar csv file met UTF8 encoding.

Ik gebruik nu tijdelijk een raspberry pi tot dat alls werk zet ik alles over naar een provider.

Om de file in te lezen in mysql ging het perfect nu ik als programma's PHP en MySql naar de laatste verie
heb nu Mysqli alles aangepast tot de laatste import ik geruik daar een stukje PHP voor zie hier onder.
nu krijg ik fout melding.

Parse error: syntax error, unexpected end of file in /var/www/html/www.orkbegraafplaatsbussum.nl/data/dbimport/index.php on line 45

lijn 45 is de laatste van PHP file, ben al en aantal dage bezig en wil de data zo snel mogenlijk live hebben.

met dit stukje heb ik HAD ik GEEN problemen met diakritische characters.

bij voobaat dank, voor de helpers.



==============================================================
<?php
echo "Ben opgestart<BR>";
# MySQL database User ID, Password, Database name, and Table Name
$sql_server = "localhost";
$sql_id = "xxxxxx";
$sql_pwd = "xxxxx";
$sql_db = "begraafplaats";
$sql_tbl = "begraafplaats";


# Connect to the database
$mysqli = mysqli_connect($sql_server,$sql_id,$sql_pwd); // or die ("geen verbinding met de database");

# Check connection
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
echo "Connected successfully";

# Delete the current content of the table
mysqli_select_db($mysqli,$sql_db); $result = mysqli_query($mysqli,"DELETE FROM $sql_tbl") or die ("Invalid DELETE query");


# Optimize the current table (recover empty space)
mysqli_select_db($mysqli,$sql_db); $result = mysqli_query($mysqli,"OPTIMIZE TABLE $sql_tbl") or die ("Invalid OPTIMIZE query");
mysqli_select_db($mysqli,$sql_db); $result = mysqli_query($mysqli,"ALTER TABLE $sql_db AUTO_INCREMENT = 1")or die ("Invalid reset AUTO_INCREMENT");

# Load local comma separated, fields enclosed by quotes text database - File has to be in the same directory of this file

mysqli_select_db($mysqli,$sql_db); $result = mysqli_query($mysqli,"LOAD DATA LOCAL INFILE './dbexport.txt' INTO TABLE $sql_tbl FIELDS TERMINATED BY ') {

if !$result {
echo 'DB Error\n';
echo 'MySQL Error: ' . mysqli_error($mysqli);
exit;
}

# Get how many records are present in the table now
mysqli_select_db($mysqli,$sql_db); $result = mysqli_query($mysqli,'SELECT * from $sql_tbl') or die ('Invalid SELECT query');
$rows_count = mysqli_num_rows($result);

echo 'Records: $rows_count' mysqli_free_result($result);

?>
==============================================================
gedeelte vaan het bestand: dbxport.txt welke ik wil lezen.


"Z12","zuster","","Aegidia","","","","","Zuster graven t.b.v. Nonnen Majella ziekenhuis, Marieenburg en Sint Olav stichting","","zuster Aegidia","","","26-3-1931",
"H1","Maria Nevelona Lijdia Geertruida","v.d.","Akker","21-9-1912","Delft","30-4-1945","Bussum","Zustergraven","","Maria Nevelona Lijdia Geertruida v.d. Akker","H1","32 jaar ","3-5-1945",
"T67","Constant Heinrich","","Albers","4-1-1877","","4-1-1961","","Volgens akte voornaam Heinrich Constanz","","Constant Heinrich Albers","T67","84 jaar ","4-1-1961",
"T67","Francisca Henriëtte Maria","","Albers","23-1-1910","","6-6-1992","","asbus","Admiraal","Francisca Henriëtte Maria Admiraal - Albers","T67","82 jaar ","9-6-1993",
"S34","Gijsbertus G.A. ( Bertie )","","Albers","21-2-1940","","5-11-1945","","","","Gijsbertus G.A. ( Bertie ) Albers","S34","5 jaar ","10-11-1945",
"A47","Jacobus Cornelis","","Albers","24-7-1907","Bussum","28-7-1964","Bussum","","","Jacobus Cornelis Albers","A47","57 jaar ","27-7-1960",
"T20","Jan ","","Albers","27-1-1862","","27-3-1927","","Bijgezet 31-03-1927","","Jan Albers","T20","65 jaar ","31-3-1927",
"S34","Johannes","","Albers","7-10-1902","","15-4-1983","","","","Johannes Albers","S34","80 jaar ","19-4-1983",
"S34","Johannus Martinus ( Hansje )","","Albers","6-11-1945","","6-2-1951","","","","Johannus Martinus ( Hansje ) Albers","S34","5 jaar ","6-2-1951",
"T20","Romanus Hendricus (Hanny)","","Albers","28-2-1904","","26-9-1967","","","","Romanus Hendricus (Hanny) Albers","T20","63 jaar ","26-9-1967",
"B28","Johannis","","Alders","31-3-1866","Bussum","10-3-1938","Bussum","zoon van Tijmen Alders en Willemijntje Prinsen.","","Johannis Alders","B28","71 jaar ","14-3-1930",
"M2","Sophia","","Alders","14-3-1871","","21-8-1943","","","Majoor","Sophia Majoor - Alders","M2","72 jaar ","24-8-1943",
"B60","Maria","","Allessie","27-8-1856","Amsterdam","21-7-1907","Bussum","dochter van Martinus Bernardus Stevens en Carolina Barbara Janssen","Vasterman","Maria Vasterman - Allessie","0","50 jaar ","21-7-1920",

=========================== Eind bestand===================================
Je script is een beetje vervormd. Geen idee hoe dat komt, maar zeker niet door een update.

Vanaf lijn 30 na je gele commentaar moet dit werken:


mysqli_select_db($mysqli,$sql_db);
$result = mysqli_query($mysqli,"LOAD DATA LOCAL INFILE './dbexport.txt' INTO TABLE $sql_tbl FIELDS TERMINATED BY '");

if (!$result) {
echo 'DB Error\n';
echo 'MySQL Error: ' . mysqli_error($mysqli);
  exit;
}

# Get how many records are present in the table now
mysqli_select_db($mysqli,$sql_db); 
$result = mysqli_query($mysqli,'SELECT * from $sql_tbl') or die ('Invalid SELECT query');
$rows_count = mysqli_num_rows($result);

echo 'Records: $rows_count'. mysqli_free_result($result);
ga er morgen even naar kijken, heb het even geprobeerd en krijg een fout op regel 1

ik hou je op de hoogte, ik ben maar een hobbyist van 74 jaar ik heb meer achter de rug dan voor de boeg dus ik wil het klaar hebben, ben alleen vrouw 5 jaar overleden en en zo bang dat als er met mij iets gebeurd alles weg is.Kinderen trekken dan overal al de stekker er uit.

mvg, Henk

Regel 1 van je script begint met <?php, dus daar kan niks mis mee zijn.
Laat even weten welke error je precies krijgt.
Ik heb het aan past en alles nog eens na gekeken, ik zag dat je de $results niet op dezelfde regel zet dat heb ik ook maar gedaan je weet maar nooit.

de error melding is:

DB Error MySQL Error: 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 ''' at line 1


======================Hier is mijn versie =====================
?php
echo "Ben gestart<BR>";

# MySQL database User ID, Password, Database name, and Table Name
$sql_server = "localhost";
$sql_id = "gebruiker";
$sql_pwd = "password";
$sql_db = "begraafplaats";
$sql_tbl = "begraafplaats";


# Connect to the database
$mysqli = mysqli_connect($sql_server,$sql_id,$sql_pwd) or die ("geen verbinding met de database");

# Check connection
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
echo "Connected successfully<BR>";

# Delete the current content of the table
mysqli_select_db($mysqli,$sql_db);
$result = mysqli_query($mysqli,"DELETE FROM $sql_tbl") or die ("Invalid DELETE query");

# Optimize the current table (recover empty space)
mysqli_select_db($mysqli,$sql_db);

$result = mysqli_query($mysqli,"OPTIMIZE TABLE $sql_tbl") or die ("Invalid OPTIMIZE query");

mysqli_select_db($mysqli,$sql_db);
$result = mysqli_query($mysqli,"ALTER TABLE $sql_db AUTO_INCREMENT = 1")or die ("Invalid reset AUTO_INCREMENT");

# ======================= vanaf hier gewijzicht ======================
# Load local comma separated, fields enclosed by quotes text database - File has to be in the same directory of this file
mysqli_select_db($mysqli,$sql_db);
$result = mysqli_query($mysqli,"LOAD DATA LOCAL INFILE './dbexport.txt' INTO TABLE $sql_tbl FIELDS TERMINATED BY '");

if (!$result) {
echo 'DB Error ';
echo 'MySQL Error: ' . mysqli_error($mysqli);
exit;
}

# Get how many records are present in the table now
mysqli_select_db($mysqli,$sql_db);
$result = mysqli_query($mysqli,'SELECT * from $sql_tbl') or die ('Invalid SELECT query');
$rows_count = mysqli_num_rows($result);

echo 'Records: $rows_count'. mysqli_free_result($result);
?>

==============================================================

Henk

$result = mysqli_query($mysqli,"LOAD DATA LOCAL INFILE './dbexport.txt' INTO TABLE $sql_tbl FIELDS TERMINATED BY ','");


Gelukkig hebben we bij de reageer-pagina ook een knop voor codeblokken op het forum. Dat maakt het beter leesbaar.
ik ben weer een stukje verder. "mijn" php file werkt tot zo ver dat de database leeg is ok die moest ook leeg.
nu het vullen in lezen van de data nog, daar kreeg ik weer een fout melding over permissies.

Warning: mysqli_query(): LOAD DATA LOCAL INFILE forbidden in /var/www/html/www.orkbegraafplaatsbussum.nl/data/dbimport/index.php on line 36
DB Error MySQL Error: LOAD DATA LOCAL INFILE is forbidden, check mysqli.allow_local_infile

even googlen ik ben niet de enige.
?php
echo "Ben gestart<BR>";

# MySQL database User ID, Password, Database name, and Table Name
$sql_server = "localhost";
$sql_id  = "root";
$sql_pwd = "ffw8enxinix";
$sql_db  = "begraafplaats";
$sql_tbl = "begraafplaats";


# Connect to the database
$mysqli = mysqli_connect($sql_server,$sql_id,$sql_pwd) or die ("geen verbinding met de database");

# Check connection
if ($mysqli->connect_error) {
  die("Connection failed: " . $mysqli->connect_error);
}
echo "Connected successfully<BR>";

# Delete the current content of the table
mysqli_select_db($mysqli,$sql_db);
$result = mysqli_query($mysqli,"DELETE FROM $sql_tbl") or die ("Invalid DELETE query");

# Optimize the current table (recover empty space)
mysqli_select_db($mysqli,$sql_db);

$result = mysqli_query($mysqli,"OPTIMIZE TABLE $sql_tbl") or die ("Invalid OPTIMIZE query");

mysqli_select_db($mysqli,$sql_db);
$result = mysqli_query($mysqli,"ALTER TABLE $sql_db AUTO_INCREMENT = 1")or die ("Invalid reset AUTO_INCREMENT");

# ======================= vanaf hier gewijzicht ====================== 
# Load local comma separated, fields enclosed by quotes text database - File has to be in the same directory of this file
mysqli_select_db($mysqli,$sql_db);
$result = mysqli_query($mysqli,"LOAD DATA LOCAL INFILE './dbexport.txt' INTO TABLE $sql_tbl FIELDS TERMINATED BY ','");

if (!$result) {
        echo 'DB Error ';
        echo 'MySQL Error: ' . mysqli_error($mysqli);
        exit;
        }

# Get how many records are present in the table now
mysqli_select_db($mysqli,$sql_db); 
$result = mysqli_query($mysqli,'SELECT * from $sql_tbl') or die ('Invalid SELECT query');
$rows_count = mysqli_num_rows($result);

echo 'Records: $rows_count'. mysqli_free_result($result);
?>


Het is et een omweg gelukt.
start mijn php scipt maakt de database leeg.
start mysql -p
plak de regel er in
 LOAD DATA LOCAL INFILE './dbexport.tab' INTO TABLE begraafplaats FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n';a


en zie hier alles er in
https://ibb.co/w7tmqZt

Ik weer verder moet nog 300 graven doen maar dit werkt.
ik denk de de het een bug is in de PHP.

miscschien komt er WEL een oplossing.

Dank tot zo ver tenzij.….. een oplossing

mvg Henk
Het is een mysql error, dus zeker geen PHP bug. Al een volledig pad geprobeerd?
Ik heb een regel voor de load file gezet. Voorkomt de melding dat je geen toestemming hebt.
Ik gebruik mysqli.
Andere oplossingen hier :
https://www.w3schools.com/php/func_mysqli_options.asp

$db->options( MYSQLI_OPT_LOCAL_INFILE, TRUE );
$result = $db->query( 'LOAD DATA LOCAL INFILE "/var/www/html/begraafplaats/dbexport.txt" INTO TABLE ' . $sql_tbl . ' FIELDS TERMINATED BY "," ENCLOSED BY "\"" LINES TERMINATED BY "\n"');

Reageren