我有一个简单的函数,它根据参数接收到的雇员代码返回一个用户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"];
}
我还尝试将表名存储在变量中并连接,但结果相同。
提前谢谢。
2条答案
按热度按时间oxiaedzo1#
我找不到任何关于下划线被限制的信息。
试着引用表名,不管怎样,这总是一个好主意。使用反引号,而不是实际的引号。
l7mqbcuq2#
标识符中的下划线字符没有限制。
标识符可以区分大小写(取决于mysql服务器的配置)。
如果标识符包含空格、点或其他不允许的字符,则需要对其进行转义。
但是,如果问题是一个无效或未知的标识符,我们希望
prepare
或者execute
抛出错误。如果
fetch
被调用,则意味着我们有一个有效的语句句柄。如果发生了错误,那么$stmt
将为false,而不是语句句柄,并且我们将看到一个php错误(布尔值没有fetch方法/函数)当没有更多行可返回时,fetch将返回false。
问题中描述的行为似乎表明查询正在成功执行,但查询返回的结果集为空。
就sql而言,select返回零行是有效的。
我们假设这两行代码
已添加以进行调试。
如果我们希望返回一行,那么发出另一个fetch是没有意义的。。。