3

ページに GET 変数を使用してテーブルからデータを取得するクエリがあります...

GET変数をエコーすると、データがそこにあるので、クエリで何か間違ったことをしているのではなく、ブラウザにエラーを表示できますか?

// Get USER ID of person
$userID = $_GET['userID'];

// Get persons
$sql = 'SELECT * FROM persons WHERE id = $userID';
$q   = $conn->query($sql) or die('failed!');
4

5 に答える 5

6
$sql = "SELECT * FROM persons WHERE id = $userID";

クエリ文字列内で変数を使用するには、二重引用符を使用する必要があります。

これを行うこともできます:

$sql = "SELECT * FROM persons WHERE id = ".$userID;

あなたがすべきことはこれです(SQLインジェクションから身を守るため):

$safeuid = $conn->prepare($userID);
$sql = "SELECT * FROM persons WHERE id = ".$safeuid;

PHPページの上部でこれを使用していつでもデバッグできます。

ini_set('display_errors',1); 
error_reporting(E_ALL);
于 2012-07-11T20:31:45.187 に答える
2

試しました$q = $conn->query($sql) or die($conn->error());か?

于 2012-07-11T20:29:08.853 に答える
1

はい、できますが、デバッグのためにのみ行う必要があります。クラッカーは、意図的に不適切な入力を与えてエラーを読み取ることで、多くの洞察を得ることができます。

MySQLi を使用していると仮定しています。コマンドは$conn->error(). したがって、あなたの行は次のようになります。

$q = $conn->query($sql) or die($conn->error());

また、あなたが間違っているのは、一重引用符を使用して定義していることです$sql。文字列に書き込むには、二重引用符を使用する必要があり$userIDます。だからあなたが欲しいのは:

$sql = "SELECT * FROM persons WHERE id = $userID";

また

$sql = 'SELECT * FROM persons WHERE id = ' . $userID;
于 2012-07-11T20:28:42.217 に答える
1

文字列内の変数を評価するには、二重引用符を使用する必要があります。あれは、

$sql = 'SELECT * FROM persons WHERE id = $userID';

する必要があります

$sql = "SELECT * FROM persons WHERE id = $userID";

を削除するのではなくdie、クエリが常に有効であることを確認する必要があります。つまり、パラメーターを検証userIDします。$_GETには、ユーザーが提供したいものをすべて含めることができます。これは、配列、文​​字列、テーブルを削除できる悪意のあるペイロードを含む文字列である可能性があります。したがって、整数であることを確認してください。そうでない場合は、関連するメッセージをユーザーに返します。

于 2012-07-11T20:31:10.517 に答える
1

PHPの専門家ではありませんが、試してみてください:

// Get USER ID of person
$userID = $_GET['userID'];

// Get persons
$sql = 'SELECT * FROM persons WHERE id = $userID';
$q   = $conn->query($sql) or die('failed!' . mysql_error());

エラーは、die メッセージの末尾に追加する必要があります。

于 2012-07-11T20:33:33.010 に答える