[PHP] LOAD DATA LOCAL INFILE probleem met \

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • chicky
  • Registratie: Augustus 2001
  • Laatst online: 01-06 15:35
Hoi,

Ik ben bezig om een tekstfile in een Mysql database te laden met het volgende stukje voorbeeld code:

PHP: filename
1
2
3
4
5
6
7
8
9
$Load_Test= "LOAD DATA LOCAL INFILE 'C:/Test.txt'
    INTO TABLE test
    FIELDS TERMINATED BY ';'
    ENCLOSED BY '\"'
    LINES TERMINATED BY '\r\n'
    ";
     
$results = mysql_query($Load_Test)
    or die (mysql_error());


Dat gaat in principe allemaal goed, op één veld na.
Het veld bevat het pad en naam van een bestand, voorbeeld "H:\rapport\bestand.pdf".
Als ik het script draai, wordt het veld ingelezen, maar wordt de inhoud van het veld beschadigd en komt het in de mysql db als volgt te staan: "H:apportbestand.pdf"

Wie kan mij uitleggen wat ik niet goed doe?

Acties:
  • 0 Henk 'm!

  • H004
  • Registratie: Maart 2006
  • Laatst online: 28-05 19:55
Je escapet de backslashes (\) niet...

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

  1. Open de file.
  2. Verander elke \ die je ziet in \\.
  3. Sla op.
  4. Try again.
Je lijkt bekend te zijn met het begrip escaping (regel 4), waarom pas je dat dan niet toe in je inputfile? "H:\rapport" wordt nu gelezen als "H:<carriage return>apport". ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

En is een
PHP:
1
$result = mysql_query($query) or die (mysql_error());
Ook niet je van het.
Van het gewoon netjes af:
PHP:
1
2
3
4
5
6
7
8
9
10
11
$result = mysql_query($query);
if(!$result)
{
    echo 'Fout in query. Zie logbestand';
    // schrijf foutmelding weg in logbestand of echo hem ;)
}
else
{
    $row = mysql_fetch_assoc($result);
    // En de rest van je ding... :)
}
Om even een (simpel) voorbeeldje te geven.

[ Voor 10% gewijzigd door CH4OS op 31-01-2009 13:59 ]


Acties:
  • 0 Henk 'm!

  • chicky
  • Registratie: Augustus 2001
  • Laatst online: 01-06 15:35
Zoals H004 zegt, ben ik waarschijnlijk vergeten mijn backslashes te escapen. Als ik het stukje voorbeeld code aanpas naar

PHP:
1
2
3
4
5
6
7
8
9
10
$Load_Test= "LOAD DATA LOCAL INFILE 'C:/Test.txt'
    INTO TABLE test
    FIELDS TERMINATED BY ';'
    ENCLOSED BY '\"'
    ESCAPED BY '\\'
    LINES TERMINATED BY '\r\n'
    ";
     
$results = mysql_query($Load_Test)
    or die (mysql_error());


Krijg ik echter de volgende fout melding:
"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''' at line 6"

De foutmelding komt in het begin van de code, terwijl het stukje ESCAPE BY bijna aan het einde zit?!

Mijn versies zijn:
PHP Version 5.1.4
MySQL - 5.0.22

Wat doe ik nou toch niey goed in de syntax (zal wel iets heel stoms zijn)

De workaround van NMe, vervang een enkelle \ door \\ in het inlees bestand werkt trouwens perfect. De oplossing is er dus _/-\o_ Maar ik ben toch erg benieuwd hoe ik het kan oplossen zonder de \ te vervangen.

Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

mysql_real_escape_string() of addslashes() al eens bekeken? :) Met andere woorden: zonder escaping kan je het niet oplossen, zoals NMe en H004 ook al aangeven, omdat \r bijvoorbeeld een carriage return is, en \n bijvoorbeeld weer een newline.

Met een beetje [google=MySQL escaping PHP] moet je toch wel een eind kunnen komen dacht ik zo.

[ Voor 70% gewijzigd door CH4OS op 31-01-2009 15:37 ]

Pagina: 1