Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menterjemah rentetan dalam MSSQL dalam php

Bagaimana untuk menterjemah rentetan dalam MSSQL dalam php

PHPz
PHPzasal
2023-04-04 18:26:06438semak imbas

Merupakan perkara biasa bagi PHP untuk menyambung ke pelayan MSSQL, tetapi apabila menterjemah rentetan, pelbagai masalah sering dihadapi. Artikel ini akan membincangkan cara mentakrif dan menterjemah rentetan dengan betul dalam MSSQL dalam PHP.

1. Perbezaan antara String dan Varchar

Dalam SQL Server, apabila mentakrifkan jenis rentetan, anda boleh menggunakan jenis char, varchar dan nvarchar. Antaranya, jenis char mentakrifkan rentetan panjang tetap, dan varchar dan nvarchar mentakrifkan rentetan panjang berubah-ubah.

Dalam PHP, pembolehubah rentetan biasanya digunakan untuk memproses data teks, dan Panjang Rentetan biasanya dipanggil panjang rentetan atau bilangan perkataan. Cara panjang rentetan dinyatakan dalam PHP adalah berdasarkan bilangan bait yang dikodkan secara dalaman, bukan bilangan aksara dalam rentetan.

Apabila PHP disambungkan ke pelayan MSSQL, penukaran pengekodan aksara biasanya digunakan kerana pengekodan aksara di antara mereka adalah berbeza. Apabila menghantar rentetan antara PHP dan MSSQL, pengekodan rentetan hendaklah utf-8, jika tidak, masalah ketidakserasian set aksara akan berlaku.

2. Terjemahan rentetan dalam MSSQL

Apabila membina pertanyaan SQL daripada input pengguna, rentetan mesti dikendalikan dengan berhati-hati. Kegagalan untuk melakukan pelarian rentetan yang betul boleh membenarkan penyerang menambah kod hasad pada pertanyaan SQL. Untuk mengelakkan situasi ini, MSSQL menyediakan fungsi escape: REPLACE. Fungsi REPLACE menggantikan aksara simpanan SQL (seperti petikan tunggal, petikan berganda dan garis miring ke belakang) dengan aksara simpanan berganda supaya ia boleh dimasukkan dalam pertanyaan SQL sebagai sebahagian daripada rentetan.

Mari kita ambil contoh kes di mana melarikan diri tidak berfungsi dengan betul:

$query = "SELECT * FROM exampleTable WHERE name = '$_POST[name]'";

Apabila melaksanakan pertanyaan ini, jika nilai yang dimasukkan oleh pengguna mengandungi petikan tunggal, SQL akan berlaku Serangan suntikan .

Penyelesaian kepada situasi ini ialah menggunakan fungsi REPLACE untuk melepaskan rentetan sebelum memasukkannya ke dalam pernyataan SQL.

$name = str_replace("'", "''", $_POST['name']);
$query = "SELECT * FROM exampleTable WHERE name = '$name'";

Fungsi str_replace di sini menggantikan petikan tunggal dalam input dengan dua petikan tunggal sebelum memasukkannya ke dalam pernyataan SQL. Dengan cara ini anda boleh mengelakkan serangan suntikan SQL.

3. Terjemahan rentetan dalam PHP

Dalam PHP, anda boleh menggunakan fungsi addslashes untuk melepaskan rentetan. Fungsi ini akan melepaskan semua aksara khas seperti petikan tunggal, petikan berganda, garis miring ke belakang, dsb. ke dalam aksara yang didahului dengan garis miring ke belakang.

Contohnya:

$str = "I'm a string with 'special' characters";
$str = addslashes($str);
echo $str;

Hasil keluaran ialah:

I\'m a string with \'special\' characters

Dalam versi di atas PHP 5.4.0, fungsi tanda senduk telah ditandakan sebagai tidak digunakan . Sebaliknya gunakan mysqli_escape_string() atau ciri penyata yang disediakan oleh PDO. Fungsi mysqli_escape_string() boleh melepaskan aksara khas dengan makna dalam pernyataan SQL dan mengekalkannya sebagai literal rentetan Apabila literal rentetan ini digunakan dalam pernyataan SQL, pelayan MySQL akan mentafsirkannya sebagai rentetan teks biasa dan Bukan sebahagian daripada arahan SQL. Ini mengelakkan serangan suntikan SQL.

Ringkasan

Apabila PHP disambungkan ke pelayan MSSQL, rentetan melarikan diri adalah bahagian penting. Apabila melakukan operasi rentetan, anda harus cuba mengelak daripada menggunakan input pengguna secara langsung. Jika anda ingin menggunakan input pengguna untuk membina pertanyaan SQL, anda mesti menggunakan fungsi REPLACE, fungsi mysqli_escape_string() atau fungsi pernyataan PDO yang disediakan untuk melakukan pelarian rentetan untuk mengelakkan serangan suntikan SQL. Selain itu, takrifan jenis String dan Varchar juga mesti dipertimbangkan dengan teliti dan mesti sepadan dengan peraturan pemprosesan panjang rentetan dalam PHP untuk mengelakkan masalah melarikan diri yang tidak dijangka.

Atas ialah kandungan terperinci Bagaimana untuk menterjemah rentetan dalam MSSQL 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