正在重置的PHP变量类型

正在重置的PHP变量类型,php,types,Php,Types,设置$\u会话的数据类型时遇到一些问题 我使用以下代码来确定是否需要设置var: if(!isset($_SESSION['login']) || (isset($_SESSION['login']) && !is_int($_SESSION['login']))){ $_SESSION['login'] = "5"; settype($_SESSION['login'], "Integer"); } 上面的代码工作得很好。然而,在我的网页上的其他地方,我使用相

设置
$\u会话的数据类型时遇到一些问题

我使用以下代码来确定是否需要设置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();
此页面顶部的代码始终处于运行状态(因此
为int($\u 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()
之后,它会再次停止工作


这是怎么发生的?我不明白,我没有将值设置为其他任何值…

作为一般性的评论:PHP是一个。不断地检查和强制类型(有点)就像与语言斗争。它永远不会完美。省去你的努力,用它来代替;-)

无论如何,
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();

亲爱的上帝,
bindValue
似乎有效!谢谢这个变量是我正在检查的两个变量之一,以防会话出现问题,这是我第一次使用
settype()