Rab Nawazの答えは機能しましたが、実際には正しくありません。
mysql_*
機能は維持されなくなり、コミュニティは非推奨プロセスを開始しました。代わりに、プリペアドステートメントについて学び、 PDOまたはMySQLiのいずれかを使用する必要があります。
決定できない場合は、この記事が選択に役立ちます。ただし、PDOはさまざまな種類のRDBMSで動作しますが、MySQLiは特定のRDBMS用に作成されていることを知っておく必要があります。PDOを使用する場合は、このチュートリアルに従うことをお勧めします。
特定のケースでは、コードは次のようになります。-
$dsn = 'mysql:dbname=dbname;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
$db = new PDO($dsn, $user, $password);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
$id = someMethodOfValidation($_POST['id']);
注:-具体的には$_POSTまたは$_GETを使用する必要があります。$ _REQUESTはどちらからでも発生する可能性があるため、入力の送信元を常に把握しておく必要があります。
ユーザー入力は常に検証する必要があります。メソッドを使用すると、SQLインジェクションを広く利用できるためsomeMethodOfValidation()
、予想される入力に合わせて書き込む必要のあるビットが残ります。あなたの場合、整数値を期待しているように見えるので、検証はと同じくらい簡単である可能性があります$id = (int)$_POST['id'];
。
SQLインジェクションについて話すとき、リトルボビーテーブルの話をするのは伝統的であるため、ここにそれがあります:-
コードを続行するには:-
$stmt = $db->prepare("SELECT * FROM sites WHERE id=:id");
$stmt->execute(array(':id' => $id));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($rows as $row){
if(!empty($row['urlone']){
echo "<h4 class='cta'><a href='{$row['urlone']}'>Launch Site</a></h4>";
}
上記のコードは安全ではなく、ライブサーバーで使用してはならないことを強調することはできません。mysql_*関数の使い方をわざわざ習得しないでください。時間を無駄にすることになります。PDOは習得するのが難しくなく、実際、一度コツをつかめば非常に簡単です。上記にリンクされているチュートリアルは、PDOを正常に使用する方法を理解するのに役立ちます。