正在重置PHP var类型

时间:2013-08-17 23:38:28

标签: php types

我在设置$_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()之后它再次停止工作......

这是怎么发生的?我不明白,我没有把价值设定为其他任何东西......

1 个答案:

答案 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();