2012-01-16 9 views
5

Tengo un archivo PHP con mis ajustes de configuración de base de datos definidos como constantes, por ejemplo:¿Cómo se inserta una constante de PHP en una consulta SQL?

<?php 

define(DB_HOST,"localhost"); 
define(DB_USERNAME,"root"); 
define(DB_PASSWORD,"password"); 
define(DB_NAME,"db_users"); 
define(DB_TABLE_1,"table_1"); 
define(DB_TABLE_2,"table_2); 

?> 

obviamente incluyen el archivo de arriba cada vez que quiero conectar a mi database..However, cuando voy a insertar el las constantes de definición de tabla en la consulta SQL (ver a continuación) no parece funcionar. ¿Debo escapar correctamente de la constante o concatenarla de alguna manera?

$query = "SELECT users FROM DB_TABLE_1"; 
+0

Si PHP solo sabía la diferencia entre una constante y una variable de solo lectura ... –

Respuesta

15

Deberá usar la concatenación de cadenas (de cualquier tipo).

$query = "SELECT users FROM " . DB_TABLE_1; 

constantes no se interpolarán en una cadena como las variables pueden.

Una alternativa hacker es utilizar una función de la variable:

$const = 'constant'; 
$query = "SELECT users FROM {$const('DB_TABLE_1')}"; 

which'll ejecutar la función constant() y devolver el valor de la constante, pero eso no es generalmente una buena idea, aunque sólo sea por el bien de la legibilidad.

+0

Me tropecé con su respuesta en lo que respecta al uso de constantes en las consultas y si fuera posible (no hay mucho por ahí en cuanto a esta). Creo que esta es una muy buena idea, Marc. A veces, ser un poco * hackish * puede ayudar a prevenir la inyección si se va un paso o dos más. Esto es similar a algo en lo que estuve trabajando hace algún tiempo y tuve algunos resultados prometedores. –

3

sólo hay que poner fuera de las comillas y que debería funcionar bien:

$query = "SELECT users FROM ".DB_TABLE_1; 
0

Creo que esto es más fácil:

$query = "SELECT users FROM '.DB_TABLE_1.'"; 

el uso de tablas múltiples:

$query = "SELECT TB_1.users, TB_2.names FROM '.TB_1.' 
      INNER JOIN '.TB_2.' 
      ON x=y"; 

Además, esto es mejor:

define("DB_HOST","localhost"); 
0

He encontrado dos maneras.

1.-

define("VALUE1", "someValue"); 
$query = "SELECT * FROM TABLE WHERE `Column` /*=" . VALUE1 . "*/"; 

2.-

define("VALUE1", "someValue"); 
define("VALUE2", "otherValue"); 
$query = "INSERT INTO TABLE (`Column1`, `Column2`) VALUES (" . VALUE1 . ", " . VALUE2 . ")"; 

Las comillas invertidas (``) utilizo porque estoy usando phpMyAdmin, es posible que no los necesita.

Cuestiones relacionadas