0

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

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

4

1 回答 1

1

总而言之: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();
于 2013-08-18T00:19:21.087 回答