当前位置: 首页 > 面试题库 >

PDO占位符的有效字符

萧伟兆
2023-03-14
问题内容

在带有PDO的PHP中,我们只能使用哪些字符。我尝试过在文档中和在线查找,但无济于事。

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

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

因此,在此示例中,字符串’:colour’中将允许使用哪些字符?


问题答案:

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

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

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



 类似资料:
  • 问题内容: $pageMin = (($page * 10)-10); 似乎占位符不适用于LIMIT … 当我将pageMin连接起来时,例如: 甚至 使用占位符,它不会返回任何结果,为什么? 谢谢你的帮忙。 问题答案: 当您将参数数组传递给它们时,它们将被视为字符串,并且limit是一个int值。只需将bindValue与int类型一起使用即可。

  • 类型 Glide允许用户指定三种不同类型的占位符,分别在三种不同场景使用: placeholder error fallback 占位符(Placeholder) 占位符是当请求正在执行时被展示的 Drawable 。当请求成功完成时,占位符会被请求到的资源替换。如果被请求的资源是从内存中加载出来的,那么占位符可能根本不会被显示。如果请求失败并且没有设置 error Drawable ,则占位符将

  • 问题内容: 本质上,我有一个必须在SQL查询中多次调用的值。因此,是否可以在语句中重用相同的命名占位符,例如 ,然后简单地执行bindValue(“:Param”),并为两个:Params设置值? 问题答案: PDO ::prepare指出“您不能在准备好的语句中两次使用相同名称的命名参数标记”,所以我想那是不可以的。

  • #{}速度快,能防止sql注入,是占位符方式,先预编译,然后填充参数,字符串格式,用户名=(___),参数只是下划线上的内容 ${}是直接拼接到语句上,这种方式需要自己拼括号和参数,但是也可以拼接想执行的任何语句,也就是传说中的sql注入 详情如下 在MyBatis中使用参数进行SQL拼装经常会使用到#{var}和${var}两种参数的设置方式。下面是两种方式的不用之处: #{var} 使用预编译

  • 问题内容: 我使用的是PHP,而MySQL使用的是PDO。有时我需要准备一个在此查询中多次使用一个变量(占位符)的语句。 例: 但是,如果我尝试准备该语句,则会出现错误,因此我需要采用以下方式: 要调用此语句,我将需要具有以下数组: 对我来说真是太蠢了!为什么MySQL(PDO?)不允许我多次使用一个占位符,并迫使我使用需要更多控制权的额外变量? 如果查询相对简单(如我在上面发布的内容),则可以轻

  • 问题内容: 为了检测hstore中密钥的存在,我需要运行如下查询: 但是,这给了我一个PDOException: 有什么办法可以逃脱问号,以便PDO不会将其用作占位符?我尝试使用最多四个反斜杠以及一个双问号(),但似乎没有什么能说服PDO留下问号。 问题答案: 使用函数调用表单。根据系统目录,hstore 运算符使用以下功能: 所以你可以这样写: (个人而言,我不是hstore以操作员为中心的设计