ホームページ  >  記事  >  バックエンド開発  >  PHPでクエリを実行する方法

PHPでクエリを実行する方法

王林
王林オリジナル
2023-05-07 09:12:06864ブラウズ

インターネット技術の発展に伴い、データベースはデータ保存の重要な手段になりました。 PHP は広く使用されているサーバーサイド スクリプト言語であり、Web サイト開発でも重要な役割を果たします。 PHP では、データベースへのクエリは開発における一般的な操作の 1 つです。そこで、この記事ではPHPでクエリ操作を行う方法を紹介します。

1. データベースへの接続

クエリ操作を実行する前に、まずデータベースに接続する必要があります。 PHP には、MySQL サーバーへの新しい接続を開くために使用される組み込み関数 mysqli_connect() が用意されています。この関数は、サーバー アドレス、ユーザー名、パスワード、データベース名などのパラメーターを渡す必要があります。サンプル コードは次のとおりです。

<?php
$servername = "localhost";
$username = "yourusername";
$password = "yourpassword";
$dbname = "yourdbname";

// 创建连接
$conn = mysqli_connect($servername, $username, $password, $dbname);

// 检测连接是否成功
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>

上記のコードでは、サーバー アドレス、ユーザー名、パスワード、データベース名の 4 つのパラメーターを渡します。接続に失敗した場合、mysqli_connect_error() 関数を通じてエラー情報が出力されます。接続に成功すると「接続に成功しました」と出力されます。

2. クエリ ステートメントの実行

接続が成功したら、mysqli_query() 関数を使用してクエリ ステートメントを実行できます。接続オブジェクトと実行する SQL ステートメントという 2 つのパラメーターを渡す必要があります。サンプル コードは次のとおりです。

<?php
$sql = "SELECT id, name, age FROM users";
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {
    // 输出数据
    while($row = mysqli_fetch_assoc($result)) {
        echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Age: " . $row["age"]. "<br>";
    }
} else {
    echo "0 results";
}

// 关闭连接
mysqli_close($conn);
?>

上記のコードでは、SELECT ステートメントを実行して、users テーブルの id、name、および age 列のデータをクエリします。 mysqli_query() 関数を使用してステートメントを実行し、結果を $result に保存します。データがクエリされると、結果セット内のデータが mysqli_fetch_assoc() 関数を通じて 1 行ずつ読み取られ、ページに出力されます。データが見つからない場合は「0件」が出力されます。最後に、mysqli_close() 関数を使用して接続を閉じます。

3. SQL インジェクションの防止

上記の例では基本的なクエリ操作は完了していますが、SQL インジェクションが存在するため、実際の開発ではさらに注意が必要です。 PHP には、SQL インジェクション攻撃を防ぐための関数がいくつか用意されています。

  1. mysqli_real_escape_string() 関数

この関数は、一重引用符、二重引用符などの SQL クエリ内の特殊文字をエスケープするために使用されます。この関数を使用すると、クエリ操作を実行する前に入力データをエスケープし、悪意のあるユーザーが SQL インジェクション コードを渡すことを回避できます。サンプル コードは次のとおりです。

<?php
$name = mysqli_real_escape_string($conn, $_POST['name']);
$sql = "SELECT * FROM users WHERE name='$name'";
$result = mysqli_query($conn, $sql);

if ($result) {
    // 输出数据
    while($row = mysqli_fetch_assoc($result)) {
        echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Age: " . $row["age"]. "<br>";
    }
} else {
    echo "0 results";
}

// 关闭连接
mysqli_close($conn);
?>

上記のコードでは、mysqli_real_escape_string() 関数を使用して、ユーザーが入力した $name をエスケープします。クエリ ステートメントを作成するとき、SQL インジェクション攻撃を避けるために、エスケープされた $name が SQL ステートメントに挿入されます。

  1. プリペアド ステートメント

PHP では、プリペアド ステートメントを使用して SQL インジェクション攻撃を回避することもできます。準備されたステートメントは、SQL ステートメントを実行する前に前処理コマンドをデータベースに送信し、実行する SQL ステートメントの構造とデータ型をデータベースに伝えます。次に、SQL インジェクション攻撃を回避するために、クエリ パラメーターが準備されたステートメントとともにデータベースに送信されます。サンプル コードは次のとおりです。

<?php
$stmt = $conn->prepare("SELECT * FROM users WHERE name=?");
$stmt->bind_param("s", $name);

$name = mysqli_real_escape_string($conn, $_POST['name']);
$stmt->execute();
$result = $stmt->get_result();

if ($result->num_rows > 0) {
    // 输出数据
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Age: " . $row["age"]. "<br>";
    }
} else {
    echo "0 results";
}

// 关闭连接
$stmt->close();
$conn->close();
?>

上記のコードでは、まず $conn->prepare() 関数を使用してプリペアド ステートメントを作成し、$stmt->bind_param( ) 関数。クエリ操作を実行する前に、ユーザーが入力した $name をエスケープし、バインディング パラメーターの $s 変数に割り当てます。最後に、$stmt->execute() 関数を使用して準備されたステートメントを実行し、$stmt->get_result() 関数を使用してクエリ結果を取得し、クエリ操作を完了します。

4. 結論

PHP でデータベースにクエリを実行することは非常に一般的な操作ですが、SQL インジェクション攻撃が存在するため、より注意する必要があります。実際の開発では、上記で紹介したインジェクション対策と併せてクエリ操作を行うことが多いです。この記事が PHP 開発におけるクエリ操作に役立つことを願っています。

以上がPHPでクエリを実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。