pdo在获取时返回false

dphi5xsq  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(371)

我有一个简单的函数,它根据参数接收到的雇员代码返回一个用户id,问题是,fetch返回false,我尝试了另一个表名,结果很好。pdo是否对名称中有u的表有一些限制?该表是fos\u user,使用fos user bundle用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"];
}

我还尝试将表名存储在变量中并连接,但结果相同。
提前谢谢。

oxiaedzo

oxiaedzo1#

我找不到任何关于下划线被限制的信息。
试着引用表名,不管怎样,这总是一个好主意。使用反引号,而不是实际的引号。

`fos_user`
l7mqbcuq

l7mqbcuq2#

标识符中的下划线字符没有限制。
标识符可以区分大小写(取决于mysql服务器的配置)。
如果标识符包含空格、点或其他不允许的字符,则需要对其进行转义。
但是,如果问题是一个无效或未知的标识符,我们希望 prepare 或者 execute 抛出错误。
如果 fetch 被调用,则意味着我们有一个有效的语句句柄。如果发生了错误,那么 $stmt 将为false,而不是语句句柄,并且我们将看到一个php错误(布尔值没有fetch方法/函数)
当没有更多行可返回时,fetch将返回false。
问题中描述的行为似乎表明查询正在成功执行,但查询返回的结果集为空。
就sql而言,select返回零行是有效的。
我们假设这两行代码

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

已添加以进行调试。
如果我们希望返回一行,那么发出另一个fetch是没有意义的。。。

$stmt->fetch()

相关问题