PDO对占位符有效的字符

Sea*_*ney 19 php pdo

在PHP中使用PDO,我们限制使用哪些字符.我试过在文档和在线查找,但无济于事.

我找到了一个帖子,其中一个用户在名称中使用了一个打破了查询的超级用户.我正在编写一个动态生成这些名称的函数,因为连字符不是nos,我想知道是否有一个备选列表.

<?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();
?>
Run Code Online (Sandbox Code Playgroud)

那么在这个例子中,字符串':color'中允许哪些字符?

Nik*_*kiC 33

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

BINDCHR     = [:][a-zA-Z0-9_]+;
Run Code Online (Sandbox Code Playgroud)

您可以使用字母数字+下划线.

  • 只看源头,我可以看到那里的错误...他们的评论表达是错误的.`--`必须后跟空格,而不仅仅是任何非换行字符. (2认同)
  • 如果有人感兴趣的话,[PHP 5.6](http://lxr.php.net/xref/PHP_5_6/ext/pdo/pdo_sql_parser.re#49)没有改变. (2认同)

San*_*hal 9

如果我正确读取PDO SQL解析器源代码,它是字母数字字符加下划线.