2011-04-27 77 views
16

在使用PDO的PHP中,我们仅限于使用哪些字符。我试过查看文档和在线但无济于事。占位符的PDO有效字符

我确实找到了一个帖子,其中用户使用了破坏查询的名称中的hypen。我正在编写一个动态生成这些名称的函数,并且因为连字符不是,所以我想知道是否有一个替代列表。

<?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(); 
?> 

所以在这个例子中,字符串':color'中允许使用什么字符?

+0

我不确定具体是什么限制,但alphanum和下划线从来没有让我失望:-) – prodigitalson 2011-04-27 20:13:38

回答

26

,找出最简单的方法,就是只检查源代码:
https://github.com/php/php-src/blob/master/ext/pdo/pdo_sql_parser.re#L49

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

您可以使用字母+下划线。

+0

哇,我没有想到这一点! +1 – SeanDowney 2011-04-27 20:23:36

+1

只要看看源代码,我就可以在那里看到错误......他们的评论表达是错误的。 '--'后面必须有空格,而不是任何非换行字符。 – mpen 2013-05-20 04:02:19

+2

如果任何人有兴趣,[PHP 5.6](http://lxr.php.net/xref/PHP_5_6/ext/pdo/pdo_sql_parser.re#49)没有改变。 – mpen 2015-02-23 23:57:15

8

如果我正确阅读PDO SQL parser source code,它是字母数字字符加下划线。

+0

非常有创意的想法! +1 – SeanDowney 2011-04-27 20:23:53

+0

@totymedli:已更新 – 2014-04-09 11:19:13