我在设置$_SESSION
- var。
我正在使用以下代码来确定是否需要设置var:
if(!isset($_SESSION['login']) || (isset($_SESSION['login']) && !is_int($_SESSION['login']))){
$_SESSION['login'] = "5";
settype($_SESSION['login'], "Integer");
}
上面的代码完美无缺。但是,在我的网页上,我使用相同的var进行查询,并且由于某些原因,这些查询会导致上面的代码运行每个页面加载。
例如,使用以下代码:
// lots of code
$STH = $DBH->prepare("SELECT something FROM somethingelse WHERE id=:id");
$STH->bindParam(":id",$_SESSION['login']);
exit();
此页面顶部的代码始终运行(因此is_int($_SESSION['login'])
为false
)。但是这段代码没有:
// lots of code
$STH = $DBH->prepare("SELECT something FROM somethingelse WHERE id=:id");
$STH->bindParam(":id",$_SESSION['login'], PDO::PARAM_INT);
exit();
但是在$STH->execute()
之后它再次停止工作......
这是怎么发生的?我不明白,我没有把价值设定为其他任何东西......
答案 0 :(得分:1)
作为一般性评论:PHP是weakly typed language。不断检查和强制类型(有点)就像打击语言一样。它永远不会是完美的。省下自己的努力并改为使用它; - )。
无论如何,PDOStatement->bindParam()
可用于在调用PDOStatement->execute()
时填写变量。虽然您的查询似乎不必写入变量(仅读取它),但PDO可能会对该类型进行一些重置。您可以将PDOStatement->bindParam()
替换为PDOStatement->bindValue()
(只接受变量的值并单独保留变量)并查看是否可以解决问题吗?
$STH = $DBH->prepare("SELECT something FROM somethingelse WHERE id=:id");
$STH->bindValue(":id",$_SESSION['login'], PDO::PARAM_INT);
exit();