2017-07-07 20 views
1

私は、の文字IDの文字のcharacter_data_storeの間で追跡するためにPHPセッション変数を使用しています。php変数を使用してMySQLクエリのWHERE条件で変数を使用するにはどうすればよいですか?

セッションIDは、mySQLクエリに入る前にその値を印刷しなければならないので、正しいIDを持っていることは間違いありません。

私は私は1つのセッションthatsのように選択された権利を確認する必要があるとして、私はすべてのユーザーのためにこれを使用することはできませんrapsheetを持っていたと明らかに

$usersql = "SELECT * 
FROM character_data_store 
WHERE character_data_store.`key` = 'RapSheet' 
AND character_data_store.character_id = '216'"; 

を使用知っていたユーザーを選択し、テストするために

変数が入って来

私が使用して試した:私はいくつかのSOの検索でした

$correctPlayer = $_SESSION['selpid']; 
echo $correctPlayer; #confirm it's the right id and then remove 

$usersql = "SELECT * 
    FROM character_data_store 
    WHERE character_data_store.'key' = 'RapSheet' 
    AND character_data_store.character_id = '$correctPlayer'"; 

をし、私はTR、int型の必要性は、彼らの周りの二重引用符ではない単一引用符を持っていることがわかりましたそれをIEDと運がなかったが、他の誰かが、私は次の試みたかを正確にしてセッションIDを置く提案:)

$usersql = "SELECT * 
    FROM character_data_store 
    WHERE character_data_store.'key' = 'RapSheet' 
    AND character_data_store.character_id = {$_SESSION['selpid']}"; 

私はこれを行うたびに、私は(mysqli_fetch_assocを取得ブール値がどの与えられ、パラメータ1がmysqli_resultされることを想定していSOは、この操作が偽になるため、playerID(selpidまたは$ correctPlayer)を受け入れていないと判断しています。

playerIDがクエリに直接挿入されているテストユーザーでは、間違いなく動作します。しかし、私はそれを行う方法を考えることができません。なぜなら、検索が行われた場所のテーブル "文字"とplayerIDを一致させ、テーブル "character_data_store"の同じplayerIDに対してラップシートデータを取得する必要があるからです。 。

PHP変数を使用してMySQLクエリのWHERE条件で変数を使用するにはどうすればよいですか?

+0

プレースホルダ( '? ')と使用しているmysqlレイヤの手段(PDOまたはmysqli_X)を使用して変数をバインドします。 –

+0

あなたは '$ usersql'をエコーすることができますか?それにセッション変数を追加したら、実際に何が入っているのかを確認してください。 – FMashiro

+0

@FMashiro私はそれをエコーし​​て、それをエコーし​​ました* from character_data_store WHERE character_data_store.key = 'RapSheet' AND character_data_store.character_id = '376'私が望むもの – DrauL

答えて

0

コードに明白な誤りがあります。 {$_SESSION['selpid']}に引用符がありません。列名に引用符を使用しています。あなたのクエリは、あなたが本当に必要な場合は、バッククォート( `)を使う代わりに、列名に引用符を使用しないでください

$usersql = "SELECT * FROM character_data_store WHERE character_data_store.`key` = 'RapSheet' AND character_data_store.character_id = '{$_SESSION['selpid']}'"; 

でなければなりません。私は準備されたステートメントをお勧めします

0

これを行う方法は複数あります。これを行うには素朴な方法は

$usersql = "SELECT * FROM character_data_store WHERE character_data_store.'key' = 'RapSheet' AND character_data_store.character_id = ".$correctPlayer; 

をBE-でしょう。しかし、私はあなたが文でPARAMATERSをバインドするbindparam機能を使用することをお勧めしますSQLインジェクションを防ぐために。

$sql="SELECT * FROM character_data_store WHERE character_data_store.'key' = 'RapSheet' AND character_data_store.character_id = ?"; 
if($stmt = $dbh->prepare($sql)){ 

    $stmt->bindParam(1, $correctPlayer, PDO::PARAM_STR); 
    $ql = $stmt->execute() or die("ERROR: " . implode(":", $dbh->errorInfo())); 
    $row = $stmt->fetch(PDO::FETCH_ASSOC); 
    $result['data'] = $row; 
+0

私はこれをラインで説明できますか? $ dbhの機能は何ですか? – DrauL

+0

$ dbhここには、$ dbh = new PDO( 'mysql:host = localhost; dbname ='。$ dbname、$ dbsettings ['user']、$ dbsettings ['password']という名前で作成できるPHPデータオブジェクトがあります。 );最初の行では、後でparmをバインドするSQL文を作成しています。 $ dbh-> prepare()が文を正常に作成すると(SQL構文エラーなし)、パラメータにバインドしてクエリを実行します。 Wecanはfetchを使用してクエリからデータを取得します。結果セットに複数の行がある場合、whileループ(while($ row = $ stmt-> fetch(PDO :: FETCH_ASSOC){....})でfetch文を使用します。 –

関連する問題