当表的名称带有下划线时,PDO在获取时返回false

时间:2018-08-28 19:56:50

标签: mysql pdo

我有这个简单的函数,该函数根据参数接收到的员工代码返回一个user_id,问题是,提取返回false,我尝试使用另一个表名并且工作正常。对于名称中带有_的表,PDO是否有一些限制? 该表是fos_user,是使用FOS User捆绑包通过symfony创建的。

这是代码。

private function getUserId(string $num_empleado): int {

    $stmt = $this->handler->prepare("SELECT id FROM fos_user WHERE numempleado = :numempleado");

    $stmt->execute([":numempleado" => $num_empleado]);

    $user_id = $stmt->fetch();
    var_dump($user_id); die;

    return $stmt->fetch()["id"];
}

我还尝试将表的名称存储在变量中并进行连接,但结果相同。

谢谢。

1 个答案:

答案 0 :(得分:1)

标识符中的下划线字符没有限制。

标识符可以区分大小写(取决于MySQL服务器配置)。

如果标识符包含空格,点或其他不允许的字符,则需要对其进行转义。

但是,如果问题是标识符无效或未知,我们希望prepareexecute会引发错误。

如果正在调用fetch,则意味着我们有一个有效的语句句柄。如果发生错误,则$stmt将为FALSE,而不是语句句柄,并且我们将看到一个PHP错误(布尔值没有获取方法/函数。)

当没有更多行要返回时,访存将返回FALSE。

问题中描述的行为似乎表明查询已成功执行,但查询返回的是空结果集。

就SQL而言,SELECT返回零行是有效的。

我们将假定这两行代码

    $user_id = $stmt->fetch();
    var_dump($user_id); die;

已添加用于调试。

如果我们期望返回一行,那么发出另一次访存就没有意义了。

    $stmt->fetch()