我有这个简单的函数,该函数根据参数接收到的员工代码返回一个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"];
}
我还尝试将表的名称存储在变量中并进行连接,但结果相同。
谢谢。
答案 0 :(得分:1)
标识符中的下划线字符没有限制。
标识符可以区分大小写(取决于MySQL服务器配置)。
如果标识符包含空格,点或其他不允许的字符,则需要对其进行转义。
但是,如果问题是标识符无效或未知,我们希望prepare
或execute
会引发错误。
如果正在调用fetch
,则意味着我们有一个有效的语句句柄。如果发生错误,则$stmt
将为FALSE,而不是语句句柄,并且我们将看到一个PHP错误(布尔值没有获取方法/函数。)
当没有更多行要返回时,访存将返回FALSE。
问题中描述的行为似乎表明查询已成功执行,但查询返回的是空结果集。
就SQL而言,SELECT返回零行是有效的。
我们将假定这两行代码
$user_id = $stmt->fetch();
var_dump($user_id); die;
已添加用于调试。
如果我们期望返回一行,那么发出另一次访存就没有意义了。
$stmt->fetch()