2012-03-19 9 views
28

Al pasar los parámetros con nombre del formulario :name a PDOStatement::bindParam(), parece que funciona si se utilizan o no los dos puntos iniciales.¿Es el colon inicial para los nombres de parámetros pasados ​​a PDOStatement :: bindParam() opcional?

es decir, ya sea esto:

$statement->bindParam(':name', $var); 

o esto:

$statement->bindParam('name', $var); 

parece funcionar.

Aquí está la documentación para PDOStatement::bindParam()

parámetro

Identificador de parámetro. Para una instrucción preparada utilizando marcadores de posición con nombre, este será un nombre de parámetro del formulario : nombre. Para una declaración preparada utilizando marcadores de posición de signo de interrogación, esta será la posición 1-indexada del parámetro.

¿Esto significa que se pueden dejar los dos puntos?

+0

Diría que se necesitan dos puntos en la expresión SQL, pero no cuando se nombra (identifica) el nombre con 'bindParam'. La función PDO es probablemente menos estricta aquí ya que puede definir su propia interfaz para nombrar el parámetro. – hakre

Respuesta

26

No, ya que la documentación no menciona esto, creo que es seguro asumir que este comportamiento no es oficialmente compatible y no se debe confiar en él.

Sin embargo, realmente funciona (al menos en PHP 5.3.24) - internamente se agregarán dos puntos al parámetro si falta (see ext/pdo/pdo_stmt.c:363 in the PHP 5.3.24 source code).

+0

Me preguntaba sobre la misma pregunta. Mi suposición es que: se usa para diferenciar estrictamente colName con palabras clave sql. Es bueno saber que la PDO arreglará la falta: en enlaces. Tomaré el consejo de Hakre y lo mantendré: en sentencias sql. – CoR

Cuestiones relacionadas