Syntax voor Regex Replace met variables in MySQL / MariaDB

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Gigazone
  • Registratie: Februari 2008
  • Laatst online: 14-06 19:49
Hallo,

Ik wil vanuit php een search and replace doen in een MariaDB.
En het liefst wil ik werken met variabelen.


Ik heb onderstaande code, en die werkt naar behoren:
In de table tmp, wordt in de kolom "colomn02" FOO vervangen door BAR.
$column = "column02";
$sql = "UPDATE tmp\n"
. "SET $column = REGEXP_REPLACE(\n"
. " $column ,\n"
. " \"FOO\",\n"
. " \"BAR\")\n"
. "WHERE $column IS NOT NULL";
mysqli_query($mysqli, $sql);
Maar als ik FOO en BAR ook in een variable stop, dan werkt het niet meer:
$column = "column02";
$search_regex = "FOO";
$replace_regex = "BAR";

$sql = "UPDATE tmp\n"
. "SET $column = REGEXP_REPLACE(\n"
. " $column ,\n"
. " $search_regex,\n"
. " $replace_regex,\n"
. "WHERE $column IS NOT NULL";
mysqli_query($mysqli, $sql);
Waar ga ik de mist in?

Beste antwoord (via Gigazone op 03-04-2019 12:07)


  • Room42
  • Registratie: September 2001
  • Niet online
@Gigazone Het zou ook helpen (en logisch zijn) als je een foutmelding geeft in plaats van alleen maar "hij doet het niet". Maar ik denk dat je aanwijzing op regel 9 van de 2e query zit. Hint: check de haakjes. ;)

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron

Alle reacties


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 10:20

Janoz

Moderator Devschuur®

!litemod

Doe in beide gevallen eens een
PHP:
1
echo $sql;

en vergelijk beide queries eens met elkaar.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Nu online
@Gigazone verander de quote eens door code tags. Dat maakt het voor ons een stuk leesbaarder. Idealiter code=php tags zodat je net zoals bij @Janoz syntax highlighting krijgt.

Sinds de 2 dagen regel reageer ik hier niet meer


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • Room42
  • Registratie: September 2001
  • Niet online
@Gigazone Het zou ook helpen (en logisch zijn) als je een foutmelding geeft in plaats van alleen maar "hij doet het niet". Maar ik denk dat je aanwijzing op regel 9 van de 2e query zit. Hint: check de haakjes. ;)

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron


Acties:
  • 0 Henk 'm!

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

Gigazone schreef op woensdag 3 april 2019 @ 11:13:
Hallo,

Ik wil vanuit php een search and replace doen in een MariaDB.
En het liefst wil ik werken met variabelen.


Ik heb onderstaande code, en die werkt naar behoren:
In de table tmp, wordt in de kolom "colomn02" FOO vervangen door BAR.


[...]


Maar als ik FOO en BAR ook in een variable stop, dan werkt het niet meer:


[...]


Waar ga ik de mist in?
In de tweede query laat je de quotes rond FOO en BAR weg.

Acties:
  • 0 Henk 'm!

  • Gigazone
  • Registratie: Februari 2008
  • Laatst online: 14-06 19:49
Bedankt, inderdaad ging het even mis met de quotes!


Ik zal in het vervolg ook proberen de juiste code tags te gebruiken, ik kon ze bij het aanmaken van de post niet vinden.

Tevens snap ik dat een foutcode ook handig zou zijn, maar die kwam er niet, dus die kon ik ook niet meenemen.

in ieder geval allemaal bedankt voor de bijdrage!

Acties:
  • 0 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Nu online
Gigazone schreef op woensdag 3 april 2019 @ 12:06:
Ik zal in het vervolg ook proberen de juiste code tags te gebruiken, ik kon ze bij het aanmaken van de post niet vinden.
Dan type je ze toch zelf :)

[ code = php ]

[ / code ]

(zonder spaties dus)

Sinds de 2 dagen regel reageer ik hier niet meer


Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Gigazone schreef op woensdag 3 april 2019 @ 12:06:
Tevens snap ik dat een foutcode ook handig zou zijn, maar die kwam er niet, dus die kon ik ook niet meenemen.
PHP:
1
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);


P.S. 'FOO' is geen regex. Dan kan je net zo goed een string replace gebruiken.

[ Voor 12% gewijzigd door DJMaze op 03-04-2019 12:10 ]

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • Gigazone
  • Registratie: Februari 2008
  • Laatst online: 14-06 19:49
P.S. 'FOO' is geen regex. Dan kan je net zo goed een string replace gebruiken.
Dat klopt, maar het ging even over de syntax van de sql query, (nog) niet over de regex patterns :)
Pagina: 1