1

ユーザーがログインしているかどうかに関係なく、サイトのページビューを追跡しようとしているため、ログに sessionId をキャプチャしています。ある時点でログインしたセッション ID の追跡結果のみを表示したいので、私のフローは次のとおりです。

$pagestats = $wpdb->get_results("SELECT * FROM wp_user_stats WHERE uid=".$_GET['viewstats']);
$sessionArray = array();

foreach($pagestats as $checkSession)
{
    if( !(in_array($checkSession->sessionId, $sessionArray)))
    {
        $sessionArray[] = $checkSession->sessionId;
        }
    }

次に、この特定のユーザーによって生成されたセッション ID に関するすべての統計を収集しようとしています...

$sessions = join(',',$sessionArray);
$pagestats = $wpdb->get_results("SELECT * FROM wp_user_stats WHERE `sessionId` IN($sessions)") or die(mysql_error());

これは、エラーをスローする部分です。エラーは次のとおりです。

Unknown column 'sjhntmqhltknks8pbhr750voe7' in 'where clause'

その列内の結果ではなく、セッション ID に一致する列を見つけようとする理由がわかりません。

4

5 に答える 5

2

セッションIDはおそらく引用符で囲まれていないため、クエリはのようになりますWHERE sessionID IN(abc, def, ...)

これを修正する1つの方法は、最初のループの行を変更することです。

$sessionArray[] = "'".$checkSession->sessionId."'";

または、引用符で囲まれた値を使用して2番目の配列を作成することもできます。

于 2012-08-20T23:41:55.353 に答える
2

問題は、セッション ID が数値ではなく、引用符で囲む必要があることです。$sessions次のようなものは、文字列に適切な引用符を追加します。

$sessions = "'" . implode("', '", $sessionArray) . "'";

$_GET['viewstats']また、 SQL インジェクション攻撃を回避するために、ユーザーが提供した入力 (例: ) を使用する前にエスケープしていることを確認する必要があります。配列$checkSession->sessionIdに追加しているので、エスケープしても害はありません。$sessionArray

フレームワークを使用している場合 (WordPress を使用しているようです)、データベース コンポーネントのマニュアルを読んでください。これを処理する関数が提供されている可能性があります。

于 2012-08-20T23:45:20.287 に答える
1

セッション値の周りに引用符を付ける必要があると思います

$sessions = "'".join("','",$sessionArray)."'";

今は のWHERE IN (a,b,c)代わりにのようですWHERE IN ('a','b','c')

于 2012-08-20T23:45:13.490 に答える
0
$pagestats = $wpdb->get_results("SELECT * FROM wp_user_stats WHERE `sessionId`=$sessions") or die(mysql_error());
于 2012-08-20T23:38:15.010 に答える
0

これは特定の問題に対する回答ではありませんが、2 番目のSELECTステートメントは不要ではないでしょうか。すべてが 1 つのテーブルに格納されている場合 (タイプミスがない限り...)、SELECT * FROM wp_user_stats WHERE uid=$_GET['view_stats']そのユーザーのすべてのセッションが取得されます。おそらく、複数のユーザーに対してそれを行う必要がありますか? その場合でも、GROUP BY句を作成するだけで済みます。

多分私は何かが欠けている - もしそうなら、申し訳ありません。

于 2012-08-21T00:41:11.557 に答える