¿La forma más eficiente de usar matrices en las declaraciones de MySQL?

Muy bien, toma esto por ejemplo:

$array['key'] = 'value';

$SQL = "SELECT column FROM table WHERE column='{$array[key]}'";

Así es como lo he estado haciendo, pero, por supuesto, si tuviera que habilitar el informe de errores E_ALL, recibiría un aviso sobre el uso de la constante no declarada, y asumiría 'clave' en lugar de una constante.

Como tal, supongo que esa no es la forma adecuada o más eficiente de hacerlo, entonces, ¿cuál sería la forma más eficiente de hacer esa consulta SQL (u otra cadena relevante)?

preguntado el 11 de mayo de 12 a las 03:05

Sugeriría cambiar a declaraciones preparadas o incluso sprintf -

@AaronW. Sí, lo he estado postergando. Supongo que ahora que estoy empezando un nuevo proyecto es un buen momento como cualquier otro para empezar. -

3 Respuestas

En realidad, si busca las reglas de comillas de cadenas PHP, si omite las comillas alrededor de la clave dentro {} se interpretará como una constante. Sin embargo, si omite el {} y las comillas, un índice de matriz simple se interpretará correctamente sin emitir un aviso.

Reglas de análisis de cadenas entre comillas dobles de PHP (Los ejemplos relevantes se encuentran en la sección Análisis de variables)

Tiendo a preferir rodearme de {} para legibilidad:

// Inside {}, you must quote the array key or it will be interpreted as a constant
$SQL = "SELECT column FROM table WHERE column='{$array['key']}'";

Pero esto también es válido y no se deben emitir avisos:

// Without {}, don't quote the array key and it will be correctly parsed.
$SQL = "SELECT column FROM table WHERE column='$array[key]'";

Tenga en cuenta que la mejor manera pasar variables a consultas SQL es usar una API que admita declaraciones preparadas en lugar de concatenar en variables

contestado el 11 de mayo de 12 a las 03:05

Ah, okey. ¡Gracias! EDITAR: Oh fooey. No puedo aceptar la respuesta por otros tres minutos. - Robar

Necesita citar la clave.

$SQL = "SELECT column FROM table WHERE column='{$array['key']}'";

contestado el 11 de mayo de 12 a las 03:05

Sí, pero corrígeme si me equivoco, pero ¿eso no producirá una cadena inesperada? La última vez que probé eso, eso fue lo que pasó. De acuerdo, eso fue probablemente hace un año más o menos, así que tal vez cambió o algo más. - Robar

No, Michael lo explicó bastante bien. - Nate

Siempre prefiero hacerlo así:

$SQL = "SELECT column FROM table WHERE column='".$array['key']."'";

y nunca me he metido en problemas con eso.

Si reutiliza el sql, el enlace sería una ventaja:

http://nz.php.net/manual/en/pdostatement.bindparam.php

HTH

contestado el 11 de mayo de 12 a las 03:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.