2011-04-27 100 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