0

SELECTMySQLクエリをPHP変数と連結しようとしていますが、エラーが発生しました。エラーを出す私のPHPステートメントは次のとおりです。

 $result=mysql_query("SELECT user_id,username,add FROM users WHERE username =".$user."AND password=".$add);

およびエラー:

( ! ) Notice: Undefined variable: info in C:\wamp\www\pollBook\poll\login.php on line 18
Call Stack

コードをどこで見逃したのかわかりません。WHERE句なしでクエリを作成すると、正常に機能します。

4

5 に答える 5

6

コードが機能しない理由

$info定義されていない変数、を使用しようとしています。未定義の変数を使用しようとすると、事実上何も文字列に連結されませんが、PHPは緩く型付けされているため、参照する2番目に変数を宣言します。noticeこれが、ではなくを表示している理由ですfatal error。コードを調べて、コードに$info値が割り当てられていること、およびある時点で別の関数によって上書きされていないことを確認する必要があります。ただし、さらに重要なのは、以下をお読みください。


あなたがしていることをやめなさい


これは、 SQLインジェクションと呼ばれるタイプの攻撃に対して脆弱です。SQL文字列を連結する方法については説明しません。それはひどい習慣です。

PHPでmysql関数を使用しないでください。それらは非推奨です。代わりに、プリペアドステートメントとともにPHPPDOオブジェクトを使用してください。これはかなり良いチュートリアルです。


このチュートリアルを読むと、PDOオブジェクトを作成できるようになるので、そのビットはお任せします。

prepare次の段階は、次の方法を使用してクエリを追加することです。

$PDO->prepare("SELECT * FROM tbl WHERE `id` = :id");
// Loads up the SQL statement. Notice the :id bit.
$actualID = "this is an ID";
$PDO->bindParam(':id', $actualID);
// Bind the value to the parameter in the SQL String.
$PDO->execute();
// This will run the SQL Query for you.
于 2013-03-08T11:45:45.023 に答える
1

「AND」の前にスペースがないため、他の回答で提案されているように一重引用符を使用する必要があります。

$result=mysql_query("SELECT user_id,username,add FROM users WHERE *username =".$user."AND* password=".$add);

更新しました:

echo $sql = "SELECT user_id,username,add FROM users WHERE username ='".$user."' AND password='".$add."'";
$result=mysql_query($sql);
于 2013-03-08T12:02:06.917 に答える
0

クエリで使用される$info変数はありませんが、クエリを修正する必要があります。

$result=mysql_query("SELECT user_id,username,add FROM users WHERE username ='" . $user . "' AND password='" . $add . "'");
于 2013-03-08T11:45:06.010 に答える
0

まず、エラーから、変数の1つが定義されていないように見えます。..確認してください。次に、構文を安全にするために、パラメーターを'で囲みます。

于 2013-03-08T11:45:35.460 に答える
-2

これは、使用している変数が上記で定義されていない可能性があるためです。

したがって、最初に変数を初期化するか、変数が他の場所(POSTまたはGET)からのものである場合は、issetメソッドで確認します

したがって、完全なコードは

$user = 123; // or $user = isset($user)?$user:123;
$add = 123456; // or $add = isset($add)?$add:123456;

そして、クエリを実行します

$result=mysql_query("SELECT user_id,username,add FROM users WHERE username =".$user."AND password=".$add);
于 2013-03-08T11:49:43.323 に答える