0

$_SESSION-varのデータ型の設定に問題があります。

次のコードを使用して、var を設定する必要があるかどうかを判断しています。

if(!isset($_SESSION['login']) || (isset($_SESSION['login']) && !is_int($_SESSION['login']))){
    $_SESSION['login'] = "5";
    settype($_SESSION['login'], "Integer");
}

上記のコードは完全に機能します。ただし、それ以外の場合は、私の Web ページで同じ 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 に答える