Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk membuat pertanyaan dalam php

Bagaimana untuk membuat pertanyaan dalam php

王林
王林asal
2023-05-07 09:12:06907semak imbas

Dengan perkembangan teknologi Internet, pangkalan data telah menjadi alat penyimpanan data yang penting. PHP ialah bahasa skrip bahagian pelayan yang digunakan secara meluas yang juga memainkan peranan penting dalam pembangunan laman web. Dalam PHP, menanyakan pangkalan data adalah salah satu operasi biasa dalam pembangunan. Jadi, artikel ini akan memperkenalkan cara melaksanakan operasi pertanyaan dalam PHP.

1. Sambungkan ke pangkalan data

Sebelum melakukan operasi pertanyaan, kita perlu menyambung ke pangkalan data terlebih dahulu. PHP menyediakan fungsi terbina dalam mysqli_connect(), yang digunakan untuk membuka sambungan baharu ke pelayan MySQL. Fungsi ini perlu memasukkan parameter seperti alamat pelayan, nama pengguna, kata laluan dan nama pangkalan data. Kod sampel adalah seperti berikut:

<?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";
?>

Dalam kod di atas, kami lulus empat parameter: alamat pelayan, nama pengguna, kata laluan dan nama pangkalan data. Jika sambungan gagal, maklumat ralat dikeluarkan melalui fungsi mysqli_connect_error(). Jika sambungan berjaya, "Berjaya disambungkan" adalah output.

2. Laksanakan pernyataan pertanyaan

Selepas sambungan berjaya, kita boleh menggunakan fungsi mysqli_query() untuk melaksanakan pernyataan pertanyaan. Ia memerlukan lulus dalam dua parameter: objek sambungan dan pernyataan SQL untuk dilaksanakan. Kod sampel adalah seperti berikut:

<?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);
?>

Dalam kod di atas, kami melaksanakan pernyataan SELECT untuk menanyakan data lajur id, nama dan umur daripada jadual pengguna. Kami menggunakan fungsi mysqli_query() untuk melaksanakan pernyataan dan menyimpan hasilnya dalam $result. Jika data ditanya, data dalam set hasil dibaca baris demi baris melalui fungsi mysqli_fetch_assoc() dan output ke halaman. Jika tiada data ditemui, "0 hasil" adalah output. Akhir sekali, kami menutup sambungan menggunakan fungsi mysqli_close().

3. Cegah suntikan SQL

Walaupun operasi pertanyaan asas telah selesai dalam contoh di atas, disebabkan kewujudan suntikan SQL, kita mesti lebih berhati-hati dalam pembangunan sebenar. PHP menyediakan beberapa fungsi untuk menghalang serangan suntikan SQL.

  1. fungsi mysqli_real_escape_string()

Fungsi ini digunakan untuk melepaskan aksara khas dalam pertanyaan SQL, seperti petikan tunggal, petikan berganda, dsb. Kita boleh menggunakan fungsi ini untuk melepaskan data input sebelum melaksanakan operasi pertanyaan untuk mengelakkan pengguna berniat jahat daripada menghantar kod suntikan SQL. Kod sampel adalah seperti berikut:

<?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);
?>

Dalam kod di atas, kami menggunakan fungsi mysqli_real_escape_string() untuk melepaskan $name yang dimasukkan oleh pengguna. Semasa membina pernyataan pertanyaan, $name yang terlepas dimasukkan ke dalam pernyataan SQL untuk mengelakkan serangan suntikan SQL.

  1. Penyata Disediakan

Dalam PHP, kami juga boleh menggunakan pernyataan yang disediakan untuk mengelakkan serangan suntikan SQL. Kenyataan yang disediakan adalah untuk menghantar arahan prapemprosesan ke pangkalan data sebelum melaksanakan pernyataan SQL untuk memberitahu pangkalan data struktur dan jenis data pernyataan SQL yang akan dilaksanakan. Kemudian, parameter pertanyaan dihantar ke pangkalan data bersama-sama dengan pernyataan yang disediakan untuk mengelakkan serangan suntikan SQL. Kod sampel adalah seperti berikut:

<?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();
?>

Dalam kod di atas, kami mula-mula mencipta pernyataan yang disediakan menggunakan fungsi $conn->prepare() dan mengikat parameter menggunakan $stmt->bind_param( ) fungsi. Sebelum melaksanakan operasi pertanyaan, kami melepaskan $name yang dimasukkan oleh pengguna dan menetapkannya kepada pembolehubah $s dalam parameter mengikat. Akhir sekali, kami menggunakan fungsi $stmt->execute() untuk melaksanakan pernyataan yang disediakan dan fungsi $stmt->get_result() untuk mendapatkan hasil pertanyaan, sekali gus melengkapkan operasi pertanyaan.

4. Kesimpulan

Menyoal pangkalan data dalam PHP adalah operasi yang sangat biasa, tetapi disebabkan kewujudan serangan suntikan SQL, kita mesti lebih berhati-hati. Dalam pembangunan sebenar, kami biasanya melakukan operasi pertanyaan bersama-sama dengan langkah anti-suntikan yang diperkenalkan di atas. Saya harap artikel ini boleh membantu untuk pertanyaan operasi dalam pembangunan PHP.

Atas ialah kandungan terperinci Bagaimana untuk membuat pertanyaan dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:php tidak dapat melihat htmlArtikel seterusnya:php tidak dapat melihat html