2

DBテーブルがあります。ユーザーが「uid」を入力できるテキスト入力を作成したいのですが、クエリはその uid に関連付けられた行を返します。

だから私はこのようなものを持っているとしましょう:

$query = "SELECT name,age FROM people WHERE uid = '2' LIMIT 0,1";
$result = mysql_query($query);
$res = mysql_fetch_assoc($result);

echo $res["age"];

そのクエリを次のように変更するにはどうすればよいですか..

SELECT name, age 
  FROM people 
 WHERE uid = $_POST['blahblah'] LIMIT 0,1

よろしくお願いします。

4

4 に答える 4

5

実際には...

// Read input from $_POST
$uid = (isset($_POST['uid']) ? $_POST['uid'] : '');

// Build query.  Properly escape input data.
$query = 
  "SELECT name,age " .
  "FROM people " .
  "WHERE uid = '" . mysql_real_escape_string($uid) . "' " . 
  "LIMIT 0,1";

セキュリティ上の理由から、変数内の文字をエスケープすることをお勧めします。いくつかの理由について、このドキュメントを見てください。

http://en.wikipedia.org/wiki/SQL_injection

于 2012-07-30T03:54:30.163 に答える
3

SQL インジェクション攻撃から救うには、以下を使用します。

$search_query = mysql_real_escape_string($_POST['blahblah']);

$query  = "SELECT name, age FROM people WHERE uid = '".$search_query."' LIMIT 0 , 1";
于 2012-07-30T03:58:04.090 に答える
0

同じことを行う方法はたくさんありますが、最初にそれをエスケープして1つの変数に格納します

$blahblah = mysql_real_escape_string($_POST['blahblah']);

そして、

最初:@Mett Loが述べたように:

$query = "SELECT name,age FROM people WHERE uid = '" . $blahblah . "' LIMIT 0,1";

2番:

$query = "SELECT name,age FROM people WHERE uid = '{$blahblah}' LIMIT 0,1";

第3:

$query = "SELECT name,age FROM people WHERE uid = '$blahblah' LIMIT 0,1";

blahblahがdbテーブルのint値である場合、4番目:

$query = "SELECT name,age FROM people WHERE uid = $blahblah LIMIT 0,1";
于 2012-07-30T04:03:50.477 に答える
0

sprintf関数を使用してクエリを作成できます。

$query = sprintf("SELECT name,age FROM people WHERE uid = '%s' LIMIT 0,1",
         $_POST['blahblah'] );

残りは同じになります。SQL攻撃を防ぐために、クエリを実行する前に$_POSTデータをエスケープすることを強くお勧めします。次のようにクエリを言い換えることができます。

$query = sprintf("SELECT name,age FROM people WHERE uid = '%s' LIMIT 0,1",
         mysql_escape_string($_POST['blahblah']) );
于 2012-07-30T04:06:51.200 に答える