-1
$InnerJoinQuery = $STD->query("
        SELECT Users.ID, Users.Username, Users.Password, UserInformation.LastName, UserInformation.Firstname, UserInformation.DOB
        FROM Users AS Users 
        INNER JOIN UserInformation AS UserInformation 
        ON Users.ID = UserInformation.UserID WHERE Users.Username=".$_SESSION['real_name']."");
        $InnerJoinArray = $InnerJoinQuery->fetch_array(MYSQLI_ASSOC);

上記のコードがエラーを引き起こしています。WHEREそれは私の条項のポイントまで機能します。

WHERE Users.Username=".$_SESSION['real_name']."

これを私のinnerjoinに実装するにはどうすればよいですか?

アップデート:

$InnerJoinQuery = $STD->query("
        SELECT Users.ID, Users.Username, Users.Password, UserInformation.LastName, UserInformation.Firstname, UserInformation.DOB
        FROM Users
        INNER JOIN UserInformation
        ON Users.ID = UserInformation.UserID WHERE Users.Username = '".$_SESSION['real_name']."'");
        $InnerJoinArray = $InnerJoinQuery->fetch_array(MYSQLI_ASSOC);



        $_SESSION['UID'] = $InnerJoinArray['ID'];
        $_SESSION['Password'] = $InnerJoinArray['Password'];
        $_SESSION['Firstname'] = $InnerJoinArray['Firstname'];
        $_SESSION['LastName'] = $InnerJoinArray['LastName'];
        $_SESSION['DOB'] = $InnerJoinArray['DOB'];
            print_r($_SESSION);

これは以下を返します:

配列 ( [実名] => inhumaneslayer [パスワード] => [UID] => [名] => [姓] => [生年月日] => )

これは予想外です。

クエリを次のように変更すると:

$InnerJoinQuery = $STD->query("
        SELECT Users.ID, Users.Username, Users.Password, UserInformation.LastName, UserInformation.Firstname, UserInformation.DOB
        FROM Users
        INNER JOIN UserInformation
        ON Users.ID = UserInformation.UserID WHERE Users.Username = 'inhumaneslayer'");

期待される結果が得られます:

配列 ( [実名] => inhumaneslayer [パスワード] => PASSWORDHIDDEN [UID] => 5 [名] => xx [姓] => xx [生年月日] => DOBHIDDEN )

これは予想されます。

unset($_SESSION);SQL を変更する前に、セッションの設定を解除しています

4

2 に答える 2

2

文字列を引用符で囲む必要があります。

... Users.Username='".$_SESSION['real_name']."'")

また、変数を適切にエスケープする必要があります。それをどのように正確に行うか-使用するDBライブラリによって異なります。あなたの場合、それはhttp://php.net/manual/en/mysqli.real-escape-string.php です

... Users.Username='". $STD->real_escape_string($_SESSION['real_name']) ."'")

しかし、より良い-準備されたステートメントの使用方法を学びますhttp://php.net/manual/en/mysqli.prepare.php

$stmt = $STD->query("
        SELECT Users.ID, Users.Username, Users.Password, UserInformation.LastName, UserInformation.Firstname, UserInformation.DOB
        FROM Users AS Users 
        INNER JOIN UserInformation AS UserInformation 
        ON Users.ID = UserInformation.UserID WHERE Users.Username=?");

$stmt->bind_param("s", $_SESSION['real_name']);

$stmt->execute();
$result = $stmt->get_result();

$InnerJoinArray = $result->fetch_array();
于 2013-01-13T03:36:21.050 に答える
-1

文字列を囲む(一重/二重)引用符を忘れています(整数ではなく文字列を探していますか?)

試す:".... WHERE Users.Username='".$_SESSION['real_name']."'")

そうでなければ、あなたが持っていた方法では、それは検索します

WHERE Users.Username=some_string(の代わりに)は文字列であり、引用符で囲む必要があるためUsers.Username='some_string'、エラーを返しますsome_string


それでも結果が得られない場合:

クエリを変数に入れてみてください$query = "SELECT Users .....";

次にecho $query、 $_SESSION 変数が実際に何を生成しているかを確認します。それを知らなければ、私にできることはこれ以上ありません。

于 2013-01-13T03:36:55.100 に答える