2011-04-27 10 views
16

En PHP con PDO, qué caracteres estamos limitados a usar. Intenté buscar en la documentación y en línea, pero fue en vano.PDO caracteres válidos para marcadores de posición

Encontré una publicación donde un usuario había usado un hypen en el nombre que rompió la consulta. Estoy escribiendo una función que genera dinámicamente estos nombres y, como los guiones no son no, me preguntaba si había una lista de alternativas.

<?php 
/* Execute a prepared statement by binding PHP variables */ 
$calories = 150; 
$colour = 'red'; 
$sth = $dbh->prepare('SELECT name, colour, calories 
    FROM fruit 
    WHERE calories < :calories AND colour = :colour'); 
$sth->bindParam(':calories', $calories, PDO::PARAM_INT); 
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12); 
$sth->execute(); 
?> 

Entonces, en este ejemplo, ¿qué caracteres se permiten en la cadena ': color'?

+0

No estoy seguro de cuáles son las limitaciones, pero el alfanumérico y los caracteres de subrayado nunca me han fallado :-) – prodigitalson

Respuesta

26

La forma más fácil de averiguar, es simplemente comprobar el código fuente:
https://github.com/php/php-src/blob/master/ext/pdo/pdo_sql_parser.re#L49:

BINDCHR  = [:][a-zA-Z0-9_]+; 

Puede utilizar caracteres alfanuméricos + subrayado.

+0

¡guau, no había pensado en eso! +1 – SeanDowney

+1

Solo mirando la fuente puedo ver errores allí ... su expresión de comentario es incorrecta. '--' debe ir seguido de espacios en blanco, no de cualquier char que no sea linebreak. – mpen

+2

No ha cambiado para [PHP 5.6] (http://lxr.php.net/xref/PHP_5_6/ext/pdo/pdo_sql_parser.re#49) si alguien está interesado. – mpen

Cuestiones relacionadas