Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah tatasusunan muncul dalam keadaan php where?

Bolehkah tatasusunan muncul dalam keadaan php where?

PHPz
PHPzasal
2023-04-19 11:38:43697semak imbas

Dalam bahasa PHP, kami sering menggunakan pangkalan data hubungan, seperti MySQL, Oracle, dll. Apabila kami perlu menanyakan data dalam pangkalan data, kami biasanya menggunakan syarat WHERE untuk menentukan skop pertanyaan.

Dalam PHP, pertanyaan data menggunakan syarat WHERE secara amnya dilaksanakan dengan menyambung penyataan SQL. Kita boleh menggunakan kelas PDO terbina dalam PHP atau kelas mysqli untuk menyambung ke pangkalan data dan melaksanakan pernyataan SQL.

Sebagai contoh, apabila menggunakan kelas mysqli, kita boleh menanyakan keadaan WHERE melalui kod PHP berikut:

<?php
$con = mysqli_connect("localhost","my_user","my_password","my_db");

// Check connection
if (mysqli_connect_errno())
{
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

// Perform queries
$result = mysqli_query($con,"SELECT * FROM customers WHERE age > 18");

while($row = mysqli_fetch_array($result))
{
  echo $row['name'] . " " . $row['age'];
}

mysqli_close($con);
?>

Dalam kod di atas, kita dapat melihat bahawa kita menggunakan WHERE Conditions untuk tentukan skop pertanyaan dan keluarkan hasil pertanyaan ke halaman.

Walau bagaimanapun, apabila menggunakan keadaan WHERE, bolehkah kita menghantar tatasusunan sebagai syarat pertanyaan?

Jawapannya ya. Kita boleh menanyakan tatasusunan sebagai keadaan WHERE dengan menukar tatasusunan kepada rentetan.

Sebagai contoh, jika kita mempunyai tatasusunan bernama $ages, yang mengandungi umur yang perlu disoal, maka kita boleh menggunakan kaedah berikut untuk menukar tatasusunan kepada rentetan dan pertanyaan:

$ages = array(18, 20, 22);
$ages_str = implode(",", $ages);
$sql = "SELECT * FROM customers WHERE age IN ($ages_str)";

Dalam kod di atas, kami menukar tatasusunan $ages menjadi rentetan yang dipisahkan koma melalui fungsi implode dan menggunakannya sebagai syarat pertanyaan.

Sudah tentu, kaedah ini perlu diberi perhatian bahawa masalah suntikan SQL mungkin berlaku. Jika terdapat beberapa aksara khas dalam tatasusunan kami, ia mungkin digunakan oleh pengguna berniat jahat untuk melakukan serangan suntikan.

Oleh itu, untuk mengelakkan masalah suntikan SQL, kita harus menggunakan pernyataan yang disediakan untuk mengelakkan masalah ini.

Sebagai contoh, menggunakan fungsi prapemprosesan mysqli, kita boleh mengubah suai kod di atas kepada bentuk berikut:

$ages = array(18, 20, 22);
$values = implode(",", array_fill(0, count($ages), "?"));
$sql = "SELECT * FROM customers WHERE age IN ($values)";

$stmt = $mysqli->prepare($sql);
foreach ($ages as $i => $age) {
    $stmt->bind_param('i', $ages[$i]);
}
$stmt->execute();
$result = $stmt->get_result();

while ($row = $result->fetch_assoc()) {
    echo $row['name'] . " " . $row['age'];
}

$stmt->close();

Dalam kod di atas, kami menggunakan pernyataan prapemprosesan mysqli, melalui Pemegang Tempat ( ?) digunakan untuk menggantikan syarat pertanyaan, dengan itu mengelakkan masalah suntikan SQL.

Ringkasnya, dalam PHP, kita boleh menggunakan tatasusunan sebagai syarat WHERE untuk pertanyaan, tetapi kita perlu memberi perhatian kepada kemungkinan masalah suntikan SQL dan harus menggunakan pernyataan yang disediakan untuk mengelakkan masalah ini.

Atas ialah kandungan terperinci Bolehkah tatasusunan muncul dalam keadaan php where?. 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