0

私は mysql に私の PhP 変数を認識させようとしてきましたが、今のところうまくいきません。

コード:

...connect to db...
session_start();
//Calls up Session stored variable
$currentUsr= $_SESSION['username'];
//SQL Query
$sql= 'SELECT Users.Username, books.* FROM Users
       INNER JOIN UserLinkBooks lb
       ON Users.Username = lb.Username
       INNER JOIN Books
       ON lb.bkTitle = books.Title
       WHERE Users.Username = "$currentUsr"';
$result=mysqli_query($conn,$sql);                                                                
//Error Check
if (!$result) {                                                                                   
   printf("Error: %s\n", mysqli_error($conn)); 
   exit();}
//display row
while($row=mysqli_fetch_array($result)){                                                                                                        
    echo "<strong>".$row['Title']."</strong>".$row['Description']."</br>";}   

私の問題は、 $currentUsr が渡されたユーザー名を適切に呼び出していないことです。エラーチェックを行った後、空のようです。

私が理解していないのは、コードを使用するときです:

$sql = "SELECT * FROM Users WHERE `Username`='$currentUsr'";

変数が処理されて正常に動作し、書籍のタイトルと説明が完全に呼び出されます。また、手動で次のように入力した場合: WHERE Users.UserName = "Bill"'; それは正常に動作します。

さまざまな試みから得た他のエラーのいくつかは次のとおりです。

  WHERE Users.UserName = '.'$currentUsr';
  Error: Unknown column '$currentUsr' in 'where clause'

また

  WHERE Users.UserName = '.$currentUsr;  
  Error:  Unknown column 'Bill' in 'where clause'

どんな助けでも大歓迎です。ありがとう

4

3 に答える 3

1

変数は一重引用符で囲まれた文字列に含まれているため、補間が妨げられています。あなたが試すことができます:

$sql = "SELECT Users.Username, books.* FROM Users
        INNER JOIN UserLinkBooks lb
        ON Users.Username = lb.Username
        INNER JOIN Books
        ON lb.bkTitle = books.Title
        WHERE Users.Username = '" . $currentUsr ."'";

私の意見では、連結を使用するとコードが読みやすくなります。そうは言っても、インジェクションの問題を削減するため、パラメーター化されたクエリの使用を検討する必要があります。mysqli にはそのような機能があります。

于 2013-05-21T22:02:47.573 に答える
0

文字列内で変数を使用する場合、これらの文字列を単一引用符ではなく二重引用符で囲む必要があります。そうしないと、変数が値に置き換えられません。

この質問も確認してください: PHP での単一引用符で囲まれた文字列と二重引用符で囲まれた文字列の違いは何ですか?

于 2013-05-21T22:03:21.890 に答える
0

二重引用符を使用する場合は、変数を中括弧で囲みます。それ以外の場合は、Concatinatoin とドットを使用します。

于 2013-05-21T22:07:40.027 に答える