在尝试优化一些代码时,我遇到了另一个问题。使用用户组和权限,WHERE
当用户权限有限时,我有时需要添加一个子句。我可以将整个查询放在 中if {...}
,但这意味着重复相同的操作除了一行之外的代码。所以我更改了仅根据 if 条件构建语句的代码,而不是重复整个部分(语句、准备、执行、获取..):
if (in_array('Edit own', $_SESSION['user_r']))
{
$sql = 'SELECT
`news_id`
FROM
`news`
WHERE
`news_user_id` = "' .$_SESSION['user_id']. '"';
}
else if (in_array('Edit all', $_SESSION['user_r']))
{
$sql = 'SELECT
`news_id`
FROM
`news`';
}
我知道也可以使用语句中的 if 条件来“拆分”语句,如下所示:
$sql = 'SELECT
`news_id`
FROM
`news`';
if (in_array('Edit own', $_SESSION['user_r']))
{
$sql .= ' WHERE
`news_user_id` = "' .$_SESSION['user_id']. '"';
}
乍一看,2. 示例可能“更好”,因为没有重复并且代码很短,但是当涉及到准备好的语句和 bind_param() 时,第一个示例可能会更好,因为我可以添加
$stmt = $db->prepare($sql);
$stmt->bind_param('ss', $what, $ever);
直接在if {...}
...里面的声明之后,不知何故,它对我来说似乎更安全...
那么我应该更喜欢哪种解决方案?