Re: " campo con apostrofe"

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.

In response to

Browse pgsql-es-ayuda by date

  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