From: | Alvaro Herrera <alvherre(at)commandprompt(dot)com> |
---|---|
To: | Mario Gonzalez <gonzalemario(at)gmail(dot)com> |
Cc: | Jaime Casanova <systemguards(at)gmail(dot)com>, Nicolas Sorich <nsorich(at)udec(dot)cl>, pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: " campo con apostrofe" |
Date: | 2005-11-30 15:24:32 |
Message-ID: | 20051130152432.GB13240@surnet.cl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Mario Gonzalez escribió:
> On 30/11/05, Jaime Casanova <systemguards(at)gmail(dot)com> wrote:
> Solamente porque no se lee o se quieren hacer las cosas mas
> "faciles", por algo a PHP se le atribuye que es malo. Porque es tan
> facil que los supuestos programadores hacen codigos con bugs y que no
> se pueden leer facilmente.
Bueno, en verdad PHP es un lenguaje malo. Un ejemplo trivial: imagina
que tienes un array $_TD que tiene un atributo 'new' el cual a su vez
tiene un atributo 'campo'. Tu puedes acceder a este ultimo atributo
usando esto:
$_TD['new']['campo']
Pero dentro de un string no puedes usar un constructo complejo como ese,
o sea no puedes hacer esto:
"este es el campo de new: $_TD['new']['campo']"
Lo que tienes que hacer es encerrar el nombre de la variable en {}. O
sea para acceder a $_TD['new'] tu puedes hacer esto:
"este es new: ${_TD['new']}"
y funciona perfectamente. Nice eh? Sin embargo si quieres acceder al
campo:
"este es campo: ${_TD['new']['campo']}"
esto ya no funciona. Por que? No tengo idea, es un bug en PHP. Un bug
que me hace desconfiar totalmente del constructo ${} en PHP y por lo
tanto prefiero usar otros mecanismos como sprintf() o simplemente
asignar a otra variable -- o derechamente usar otro lenguaje ;-)
Esto no es un ejemplo hipotetico ni inventado. Lo he sacado directo de
los tests de regresion de PL/php, donde se hace una prueba de triggers
examinando el 'new' (que es como el NEW de PL/pgSQL).
CREATE FUNCTION trigfunc() RETURNS trigger LANGUAGE plphp AS $$
$extra = "";
if ($_TD['level'] == 'ROW') {
if ($_TD['event'] == 'DELETE' || $_TD['event'] == 'UPDATE') {
$extra .= " old val: ". $_TD['old']['a'];
}
if ($_TD['event'] == 'INSERT' || $_TD['event'] == 'UPDATE') {
$extra .= " new val: ". $_TD['new']['a'];
}
}
pg_raise('notice', "trigger: ${_TD['name']} table: ${_TD['relname']}, ".
"level: ${_TD['level']} event: ${_TD['when']} ${_TD['event']}$extra");
$$;
--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2005-11-30 15:27:09 | Re: " campo con apostrofe" |
Previous Message | Jaime Casanova | 2005-11-30 14:38:38 | Re: formato fecha |