2016-10-18 7 views
1

を使用して動作していない私は、次のMySQLのクエリを持っている:セッション変数は、PHP

"UPDATE main SET latitude = '{$_POST['latitude']}', longitude = '{$_POST['longitude']}' WHERE idUser = '".$_SESSION['userId']."'"" 

しかし、userIdをクエリで常にnullであるため、これは動作しません。

しかし、私が$_SESSION['userId']をエコーし​​た場合、私は32を得る(これは私が欲しいものです)。

そして私はSQLを変更した場合:

"UPDATE main SET latitude = '{$_POST['latitude']}', longitude = '{$_POST['longitude']}' WHERE idUser = 32" 

それは魔法のように動作します!!!

私は間違っていますか?

EDIT:

私は書類を作成に使用するコードを変更している、それはまだ動作しません。..

global $conn; 
$stmt = $conn->prepare("UPDATE main SET latitude = ?, longitude = ? WHERE idUser = ?"); 
$stmt->bind_param("ssd", $_POST['latitude'], $_POST['longitude'], $_SESSION['userId']); 
$stmt->execute(); 

私は手動で私はから得たユーザIDを書き込む場合にのみ動作しますエコーof $_SESSION['userId']

+0

セッションを使用するすべてのページの上部に 'session_start();'を置く必要があります。 –

+0

私はすでにそれを行いました。そうでなければ、エコーは機能しませんでした。 –

+0

残りのコードはここで見ることができないので*チェックしてください。 –

答えて

-1

なぜ$ _POST変数と同じ方法で引用符を使用しないのですか?その文字列の中で引用符を使用する方法と関係している必要があります。

'UPDATE main SET latitude = '". $_POST['latitude'] ."', 
longitude = '". $_POST['longitude'] ."' 
WHERE idUser = '". $_SESSION['userId']; 

また、コメントに記載されているとおり、準備済みの文を使用する必要があります。

+0

あなたはその連結のすべてを必要としません。変数は適切に補間されます。 –

+0

それは残念ながらまだ動作しません –

0

その文字列の末尾に余分な二重引用符があります。.$_SESSION['userId']."'""は、どのようにコンパイルしてもわかりません。

0

単一のbindParam()コマンドを使用して複数のパラメータをバインドすることはできません(間違った機能bind_param()も使用しています)。また、バインディングは名前付きプレースホルダにも使用されます。無名のプレースホルダを使用してプリペアドステートメントのために、単にすなわち、配列として変数を使用して​​を実行します。

global $conn; 
$stmt = $conn->prepare("UPDATE main SET latitude = ?, longitude = ? WHERE idUser = ?"); 
$stmt->execute(array($_POST['latitude'], $_POST['longitude'], $_SESSION['userId'])); 

あなたがbindParam()を使用する場合は、使用します。

global $conn; 
$stmt = $conn->prepare("UPDATE main SET latitude = :lat, longitude = :long WHERE idUser = :userId"); 
$stmt->bindParam(':lat', $_POST['latitude']); 
$stmt->bindParam(':long', $_POST['longitude']); 
$stmt->bindParam(':userId', $_SESSION['userId']); 
$stmt->execute(); 

重要な注意:それはそうと無効な機能を使用すると、エラー報告を抑制しているように、bind_param()はエラーを投げたはずです。開発環境でエラー報告を有効にする必要があります。

関連する問題