Rumah >pembangunan bahagian belakang >masalah PHP >Mari kita bincangkan tentang masalah pernyataan pertanyaan php sql Cina
Apabila menggunakan PHP untuk melaksanakan pertanyaan SQL, anda akan menghadapi beberapa masalah jika pernyataan pertanyaan mengandungi bahasa Cina. Artikel ini akan menerangkan isu ini dan cara menyelesaikannya.
Masalah 1: Pernyataan pertanyaan SQL mengandungi bahasa Cina dan tidak boleh dilaksanakan secara normal atau hasil pertanyaan tidak betul
Masalah ini biasanya disebabkan oleh masalah pengekodan. Apabila menggunakan rentetan Cina sebagai syarat pertanyaan, anda perlu memastikan bahawa pernyataan pertanyaan dan pengekodan pangkalan data adalah konsisten, jika tidak, aksara yang bercelaru akan muncul atau hasil pertanyaan akan menjadi salah.
Penyelesaian:
$db = new PDO('mysql:host=localhost;dbname=test', 'username', 'password'); $db->exec('SET NAMES utf8'); $name = '张三'; $stmt = $db->prepare('SELECT * FROM table WHERE name = ?'); $stmt->execute(array($name)); $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
Dalam contoh di atas, "SET NAMES utf8" memberitahu pangkalan data untuk menggunakan pengekodan UTF-8 untuk menghuraikan input dan output. Kemudian gunakan pernyataan PDO yang disediakan untuk memastikan parameter pertanyaan dikodkan dengan betul.
Masalah 2: Serangan suntikan SQL
Oleh kerana pernyataan pertanyaan SQL mengandungi data yang dimasukkan pengguna, anda mungkin menghadapi serangan suntikan SQL. Apabila pengguna memasukkan rentetan berniat jahat, penyerang boleh menyuntik kod SQL sewenang-wenangnya ke dalam pertanyaan, seperti memadamkan jadual, memasukkan data berniat jahat, dsb.
Penyelesaian:
$name = $_POST['name']; $stmt = $db->prepare('SELECT * FROM table WHERE name = ?'); $stmt->execute(array($name)); $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
Dalam contoh ini, "nama" yang dimasukkan pengguna diperoleh daripada tatasusunan $_POST, dan kemudian dihantar sebagai parameter kepada pemegang tempat dalam PDO yang disediakan simbol pernyataan.
$name = filter_var($_POST['name'], FILTER_SANITIZE_STRING); $stmt = $db->prepare('SELECT * FROM table WHERE name = ?'); $stmt->execute(array($name)); $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
Dalam contoh di atas, menggunakan penapis FILTER_SANITIZE_STRING memastikan bahawa $name hanya mengandungi aksara rentetan dan mengalih keluar semua teg HTML dan aksara yang tidak diperlukan.
Gunakan kaedah ini untuk menyelesaikan masalah aksara Cina yang disertakan dalam pernyataan pertanyaan SQL dalam pertanyaan PHP. Pastikan pengekodan penyata pertanyaan dan data input pengguna adalah konsisten, dan gunakan kenyataan atau penapis prapemprosesan PDO untuk memastikan keselamatan data input pengguna.
Atas ialah kandungan terperinci Mari kita bincangkan tentang masalah pernyataan pertanyaan php sql Cina. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!