Menambah data daripada borang ke mysql. Menambah imej pada pangkalan data MySQL melalui PHP. Kemasukan Php ke pangkalan data mysql. Contoh praktikal

Dalam entri ini saya ingin memberitahu anda, bagaimana untuk memindahkan data yang dimasukkan ke dalam borang ke Pangkalan Data. Oleh itu, kami mencipta borang mudah di mana kami akan mempunyai dua medan: nama pengguna dan e-melnya:

Nama awak:
Emel anda:


Borang ini boleh digunakan untuk mendaftar pengguna baharu, menghantar berita, mengumpul statistik, atau apa-apa sahaja... Secara umum, pengguna memasukkan datanya ke dalam borang ini: nama dan e-mel, klik pada butang dan kemudian data masuk ke dalam skrip PHP:

$nama = $_POST["nama"]; $email = $_POST["emel"]; $result = mysqli_query("MASUKKAN KE DALAM pengguna (nama, e-mel) NILAI ("$nama", "$emel")"); jika ($hasil) ( echo "Data berjaya disimpan!"; ) else ( echo "Ralat berlaku, sila cuba lagi."; )


Apa yang berlaku dalam skrip ini? Mari kita fikirkan sekarang!
Data yang dimasukkan ke dalam borang dipindahkan menggunakan kaedah POST ke skrip php (yang ditulis di atas), dan menggunakan tatasusunan global $_POST, data dibentuk menjadi pembolehubah $name dan $email:

$nama = $_POST["nama"]; $email = $_POST["emel"];


Selepas pembolehubah sedia untuk dimasukkan ke dalam pangkalan data, kami membuat permintaan. Tetapi pertama, skrip anda mesti sudah disambungkan ke pangkalan data; Saya menulis dalam utas ini cara menyambung ke pangkalan data: . Permintaan itu sendiri kelihatan seperti ini:

$result = mysqli_query("MASUKKAN KE DALAM pengguna (nama, e-mel) NILAI ("$nama", "$emel")");


Dalam kod ini, kami telah menyatakan bahawa pembolehubah berikut akan ditambahkan pada nama dan sel e-mel yang terdapat dalam jadual pengguna: $name dan $email.
Seterusnya, jika semuanya berjalan lancar, kami akan menerima mesej daripada syarat:

Data berjaya disimpan!


Jika sebarang masalah timbul dan data belum dimasukkan, kami akan menerima mesej ralat:

Ralat telah berlaku, sila cuba lagi.


Itu sahaja!

*** *** *** *** ***

Jika mahu, anda boleh menambah lebih banyak medan untuk memasukkan maklumat, sebagai contoh, kami perlu menambah medan untuk memasuki bandar pengguna. Kami sudah mempunyai skrip siap (ditulis di atas), kini kami hanya akan menambah medan Bandar anda, mari kita panggil pembolehubah: $city . Dan seterusnya dalam borang kemasukan data, selepas:

Emel anda:


Tambah:

Bandar anda:


Dalam skrip php, selepas:

$email = $_POST["emel"];


Tambah:

$city = $_POST["city"];


Dan sudah tentu kami menambahkannya dalam permintaan juga, seperti ini:

$result = mysqli_query("INSERT INTO user (nama, email, city) NILAI ("$name", "$email", "$city")");


Inilah yang anda sepatutnya berakhir dengan:
Borang input:

Nama awak:
Emel anda:
Bandar anda:


Skrip:

$nama = $_POST["nama"]; $email = $_POST["emel"]; $city = $_POST["city"]; $result = mysqli_query("INSERT INTO user (nama, email, city) NILAI ("$name", "$email", "$city")"); if ($result == true) ( ​​​​echo "Data berjaya disimpan!"; ) else ( echo "Ralat berlaku, sila cuba lagi."; )


Seperti yang anda lihat, tiada yang rumit! Jika perlu, anda boleh menambah medan lain, dan satu lagi, dan satu lagi...

Panduan ini akan menunjukkan kepada anda cara mula mengurus pangkalan data daripada anda PHP skrip. Anda akan belajar menambah rekod pada jadual MySQL, menggunakan kod PHP. Sebelum anda mula, lihat tutorial kami yang lain yang merangkumi langkah asas bekerja dengan PHP dan pangkalan data - menyambung daripada PHP ke pangkalan data MySQL.

Sebelum anda memulakan, semak perkara berikut:

  • Akses kepada panel kawalan pengehosan anda

Langkah 1 - Mencipta Jadual

Pertama sekali, kami perlu membuat jadual untuk data anda. Ini adalah prosedur yang sangat mudah yang boleh anda lakukan phpMyAdmin daripada panel kawalan pengehosan anda. Kami telah membincangkan proses mencipta pangkalan data MySQL dalam tutorial sebelumnya, jadi kami akan melangkau bahagian itu di sini.

Selepas log masuk ke halaman phpMyAdmin, anda akan melihat gambar seperti ini:

Mari buat jadual dengan nama pelajar untuk pangkalan data kami u266072517_name. Anda boleh membuat jadual baharu menggunakan butang Cipta Jadual. Selepas ini, anda akan melihat halaman baharu di mana anda boleh memasukkan semua data yang diperlukan untuk jadual anda:

Ini adalah cara paling mudah untuk mencipta jadual, untuk mendapatkan maklumat lanjut tentang struktur jadual/pangkalan data dan tetapan yang boleh digunakan untuk setiap medan, sila rujuk dokumentasi rasmi phpMyAdmin.

Berikut ialah beberapa penjelasan mudah tentang medan yang akan kami gunakan:

  • Nama ialah nama bidang anda. Akan muncul di bahagian paling atas meja anda.
  • taip– di sini anda boleh menetapkan jenis medan. Sebagai contoh, kita memilih varchar kerana di sini kita perlu memasukkan rentetan dengan nama (yang mempunyai huruf, bukan nombor).
  • Panjang/Nilai– digunakan untuk menetapkan panjang maksimum entri anda dalam medan ini.
  • Indeks– kami menggunakan indeks "Utama" untuk medan "ID" kami. Apabila membuat jadual, adalah disyorkan untuk mempunyai satu medan ID. Ia digunakan untuk mengindeks rekod dalam jadual apabila perhubungan antara jadual dikonfigurasikan. Ia juga boleh diperhatikan di sini "A_I", yang bermaksud Kenaikan Auto. Tetapan ini secara automatik akan meningkatkan indeks (1,2,3,4...).

klik Jimat dan jadual anda akan dibuat.

Langkah 2 - Buat kod PHP dan tambahkan entri pada jadual MySQL

Pilihan 1 – Kaedah MySQLi

Pertama sekali, anda perlu mewujudkan sambungan ke pangkalan data, mengikut tutorial kami sebelum ini. Selepas ini kita boleh meneruskan dengan pertanyaan SQL untuk menambah rekod pada jadual MySQL − INSERT. Berikut ialah contoh kod lengkap dengan kaedah sambungan dan sisipan:

" . mysqli_error($conn); ) mysqli_close($conn); ?>

Oleh itu, bahagian pertama kod (baris 3 – 18 ) merujuk kepada bahagian penubuhan sambungan pangkalan data. Kami tidak akan melalui bahagian ini lagi, jika anda ingin tahu maksud setiap baris, rujuk panduan kami sebelum ini tentang cara menyambung ke pangkalan data.

Mari kita mulakan dengan baris 19 :

$sql = "MASUKKAN KE DALAM Pelajar (nama, nama keluarga, e-mel) NILAI ("Thom", "Vial", " [e-mel dilindungi]")";

Ini adalah baris kod yang paling penting, ia melakukan semua yang kami bincangkan dalam tutorial ini - menambah rekod pada jadual MySQL dalam pangkalan data. MASUKKAN KE DALAM ialah ungkapan yang menambah rekod pada jadual pangkalan data MySQL yang ditentukan. Dalam contoh kami, kami menambah data pada jadual pelajar.

Bergerak lebih jauh, dalam kurungan, kami mentakrifkan medan jadual yang akan kami tambahkan nilai: (nama, nama keluarga, e-mel). Data akan ditambah dalam susunan tertentu. Jika kita menulis (e-mel, nama keluarga, nama), nilai akan ditambah dalam susunan yang berbeza.

Bahagian seterusnya makna NILAI. Di sini kami menetapkan nilai kami dalam medan yang dinyatakan sebelum ini. Oleh itu, setiap medan akan menerima nilainya sendiri. Sebagai contoh, dalam kes kami ia akan menjadi seperti: nama = Thom, nama keluarga = Vial, e-mel = [e-mel dilindungi] .

Apa yang penting untuk diperhatikan ialah di sini kita sedang membentuk Pertanyaan SQL menggunakan kod PHP. Pertanyaan SQL mesti disertakan dalam petikan. Dalam contoh kami, segala-galanya antara petikan dan datang selepas $sql = adalah pertanyaan SQL.

Bahagian seterusnya kod ( 20 – 22 lines) menjalankan permintaan kami dan menyemak kejayaan permintaan:

Jika (mysqli_query($conn, $sql)) ( echo "Rekod baharu berjaya dibuat"; )

Mesej kejayaan dipaparkan jika pertanyaan dijalankan dengan betul.

Dan bahagian akhir ( 22 – 24 baris) tunjukkan mesej lain sekiranya permintaan kami gagal:

Lain ( echo "Ralat: " . $sql ."
" . mysqli_error($conn); )

Kod ini menunjukkan kepada kami mesej ralat sekiranya berlaku kesilapan.

Pilihan 2 – Kaedah Objek Data PHP (P HP D ata O bject)

Seperti dalam contoh sebelumnya, kita perlu membuat sambungan ke pangkalan data, yang dilakukan apabila mencipta objek PDO baharu - tutorial sebelumnya bercakap tentang bagaimana ini berlaku. Oleh kerana sambungan pangkalan data MySQL ialah objek PDO, kita mesti menggunakan pelbagai 'kaedah' PDO (sejenis fungsi yang merupakan sebahagian daripada objek tertentu) untuk menyediakan dan menjalankan pertanyaan. Kaedah objek dipanggil seperti ini:

$the_Object->the_Method();

PDO membolehkan anda 'menyediakan' kod SQL sebelum melaksanakannya. Pertanyaan SQL dinilai dan diselaraskan sebelum dijalankan. Oleh itu, serangan suntikan SQL mudah boleh dilakukan dengan mengisi kod SQL dalam medan borang. Sebagai contoh:

// Pengguna menulis ini dalam medan nama pengguna borang log masuk thom"; DROP DATABASE user_table; // Pertanyaan terakhir menjadi ini "SELECT * FROM user_table WHERE nama pengguna = thom"; DROP DATABASE user_table;

Oleh kerana kod SQL adalah betul dari segi sintaksis, koma bertitik membuat DROP DATABASE user_table pertanyaan SQL baharu dan jadual pengguna anda dipadamkan. Ungkapan yang disediakan tidak membenarkan aksara Dan ; untuk melengkapkan permintaan asal, dan arahan GUGURKAN PANGKALAN DATA tidak akan pernah dilaksanakan.

Sentiasa Gunakan pertanyaan yang disediakan semasa menghantar atau menerima data daripada pangkalan data dengan PDO.

Untuk menggunakan ungkapan yang disediakan, anda perlu mencipta pembolehubah baharu yang akan memanggil kaedah tersebut sediakan() pada objek pangkalan data.

Dalam bentuk yang betul kod itu kelihatan seperti:

$servername = "mysql.hostinger.com"; $database = "u266072517_name"; $username = "u266072517_user"; $kata laluan = "buystuffpwd"; $sql = "mysql:host=$servername;dbname=$database;"; $dsn_Options = ; // Buat sambungan baharu ke pangkalan data MySQL menggunakan PDO, $my_Db_Connection ialah objek cuba ($my_Db_Connection = new PDO($sql, $username, $password, $dsn_Options); echo "Berjaya disambungkan"; ) catch (PDOException $ error) ( echo "Connection error: " . $error->getMessage(); ) // Tetapkan pembolehubah untuk orang yang ingin kita tambahkan ke pangkalan data $first_Name = "Thom"; $last_Name = "Vial"; $emel = " [e-mel dilindungi]"; // Di sini kami mencipta pembolehubah yang memanggil kaedah prepare() objek pangkalan data // Pertanyaan SQL yang anda mahu jalankan dimasukkan sebagai parameter, dan ruang letak ditulis seperti ini: placeholder_name $my_Insert_Statement = $my_Db_Connection-> prepare("INSERT INTO Students (name, lastname, e-mel) VALUES (:first_name, :last_name, :email)"); // Sekarang kita beritahu skrip pembolehubah yang setiap pemegang tempat sebenarnya merujuk kepada menggunakan kaedah bindParam() // Pertama parameter ialah pemegang tempat dalam pernyataan di atas - parameter kedua ialah pembolehubah yang harus dirujuk kepada $my_Insert_Statement->bindParam(:first_name, $first_Name); $my_Insert_Statement->bindParam(:last_name, $last_Name); $my_Insert_Statement-> bindParam(:email, $email); // Laksanakan pertanyaan menggunakan data yang baru kami takrifkan // Kaedah execute() mengembalikan BENAR jika berjaya dan SALAH jika tidak, membolehkan anda menulis mesej anda sendiri di sini jika ( $my_Insert_Statement->execute()) ( echo "Rekod baharu berjaya dibuat"; ) else ( echo "Tidak dapat mencipta rekod"; ) // Pada ketika ini anda boleh menukar data pembolehubah dan laksana semula untuk menambah lebih banyak data pada pangkalan data $first_Name = "John"; $last_Name = "Smith"; $emel = " [e-mel dilindungi]"; $my_Insert_Statement->execute(); // Laksanakan sekali lagi sekarang bahawa pembolehubah telah berubah jika ($my_Insert_Statement->execute()) ( echo "Rekod baru berjaya dicipta"; ) else ( echo "Tidak dapat mencipta rekod"; )

Pada baris 28, 29 dan 30 kami menggunakan kaedah tersebut bindParam() objek pangkalan data. Terdapat juga kaedah bindValue(), berbeza daripada yang sebelumnya.

  • bindParam() – kaedah ini mengira data apabila kaedah laksanakan() dicapai. Kali pertama skrip mencapai kaedah laksanakan() dia nampak tu $first_Name rujukan "Thom", mengikat nilai itu dan melaksanakan pertanyaan. Apabila skrip mencapai kaedah untuk kali kedua laksanakan(), dia nampak macam tu $first_Name kini merujuk kepada "John", mengikat nilai itu dan menjalankan pertanyaan semula dengan nilai baharu. Adalah penting untuk memahami bahawa kami membuat permintaan sekali dan kemudian menggantikan data yang berbeza di tempat yang berbeza dalam skrip.
  • bindValue() – kaedah ini mengira data sebaik sahaja tiba gilirannya. Sejak nilai $first_Name telah ditetapkan kepada "Thom" pada masa kami mencapai kaedah tersebut bindValue(), ia akan digunakan apabila memanggil kaedah laksanakan() Untuk $my_Insert_Statement.

Sila ambil perhatian bahawa kami menggunakan semula pembolehubah $first_Name dan berikan nilai baharu untuk kali kedua. Jika anda menyemak pangkalan data anda selepas menjalankan skrip ini, kedua-dua nama yang diberikan akan berada di sana, bertentangan dengan nilai pembolehubah ini $first_Name akan sama dengan "John" pada akhir skrip ini. Ingat bahawa PHP menilai kandungan skrip sebelum ia dijalankan.

Jika anda menukar skrip anda dengan menggantikan bindParam pada bindValue, anda akan menambah "Thom Vial" pada pangkalan data MySQL dua kali dan John Smith akan diabaikan.

Langkah 3 - Sahkan kejayaan dan selesaikan isu umum

Jika pertanyaan yang kami jalankan dalam pangkalan data MySQL berjaya, kami akan melihat mesej berikut:

Menyelesaikan ralat biasa

MySQLi

Dalam sebarang kes lain, mesej ralat akan ditunjukkan dan bukannya mesej di atas. Sebagai contoh, mari buat satu ralat sintaks dalam kod kami dan kami akan mendapat ini:

Seperti yang kita lihat, bahagian pertama kod adalah baik, sambungan telah berjaya diwujudkan, tetapi pertanyaan SQL kami menemui kegagalan apabila dilaksanakan.

"Ralat: INSERT INTO Students (nama, nama keluarga, e-mel) VALUES ("Thom", "Vial", " [e-mel dilindungi]") Anda mempunyai ralat dalam sintaks SQL anda; semak manual yang sepadan dengan versi pelayan MySQL anda untuk sintaks yang betul untuk digunakan berhampiran "(nama, nama keluarga, e-mel) NILAI ("Thom", "Vial", " [e-mel dilindungi]")" di baris 1"

Terdapat ralat sintaks yang menyebabkan skrip kami gagal. Ralat adalah di sini:

$sql = "MASUKKAN KE DALAM Pelajar (nama, nama keluarga, e-mel) NILAI ("Thom", "Vial", " [e-mel dilindungi]")";

Seperti yang anda lihat, kami menggunakan pendakap kerinting dan bukannya kurungan. Ini tidak betul dan mengakibatkan ralat sintaks dalam skrip kami.

PDO

Pada baris 7 sambungan PDO, mod pengendalian ralat ditetapkan untuk 'memaparkan semua pengecualian'. Jika anda mengalih keluar ini daripada skrip dan permintaan gagal, anda tidak akan menerima sebarang mesej ralat. Dengan pengecualian didayakan, masalah khusus yang dihadapi akan dipaparkan. Ini biasanya paling baik digunakan semasa membangunkan skrip, kerana ia mungkin mendedahkan pangkalan data dan nama jadual yang anda ingin sembunyikan daripada sesiapa sahaja yang mungkin mendapat akses tanpa kebenaran kepada data anda. Dalam kes di atas, apabila pendakap kerinting digunakan dan bukannya kurungan, ralatnya kelihatan seperti di bawah:

Ralat maut: Pengecualian tidak ditangkap "PDOException" dengan mesej "SQLSTATE: Ralat sintaks atau pelanggaran akses: 1064 Anda mempunyai ralat dalam sintaks SQL anda; semak manual yang sepadan dengan versi pelayan MySQL anda untuk sintaks yang betul untuk digunakan berhampiran "(nama, nama akhir, e-mel) NILAI ("Thom", "Vial", " [e-mel dilindungi]")" di baris 1"

Masalah lain yang mungkin anda hadapi:

  • Medan dinyatakan dengan salah (medan tidak wujud atau nama salah eja).
  • Jenis nilai tidak sepadan dengan jenis medan. Sebagai contoh, apabila kita ingin menetapkan nilai nombor 47 padang Nama, kami akan mendapat ralat kerana nilai dijangkakan sebagai rentetan. Tetapi, jika anda menyatakan nombor dalam petikan, sebagai contoh, “47” , tidak akan ada ralat kerana nombor kami akan ditulis sebagai rentetan dalam medan ini.
  • Percubaan untuk memasukkan data ke dalam jadual yang tidak wujud atau ralat dalam mengeja nama jadual.

Semua ralat ini boleh diperbaiki dengan mengikuti panduan pembetulan ralat atau dengan menyemak log ralat.

Selepas berjaya menambah data, kami harus melihatnya dalam pangkalan data kami. Berikut ialah contoh jadual yang kami tambahkan data kami, lihat phpMyAdmin.

Kesimpulan

Dalam tutorial ini anda belajar cara menggunakan Kod PHP untuk menambah rekod pada jadual MySQL menggunakan MySQLi Dan PDO. Kami juga melihat ralat biasa dan penyelesaiannya. Mengetahui cara menggunakan kod PHP untuk menambah pangkalan data MySQL akan berguna sama ada anda sedang belajar memprogram atau sudah mencipta tapak web anda sendiri.

Dalam artikel ini, kita akan melihat cara menggunakan PHP untuk memasukkan baris ke dalam pangkalan data MySQL.

Langkah 1 - Mencipta Jadual

Mula-mula anda perlu membuat jadual untuk data. Ini adalah prosedur mudah yang boleh dilakukan menggunakan phpMyAdmin dalam panel kawalan pengehosan anda.

Selepas log masuk ke phpMyAdmin anda akan melihat antara muka ini:

Mari buat jadual bernama Pelajar dalam pangkalan data u266072517_name dengan mengklik pada butang "Buat Jadual". Selepas ini, kami akan melihat halaman baharu di mana kami menetapkan semua parameter jadual yang diperlukan:

Ini adalah tetapan paling mudah yang boleh digunakan pada jadual dan mendapatkan maklumat lanjut tentang struktur jadual/pangkalan data.

Pilihan lajur:

  • Nama ialah nama lajur yang muncul di bahagian atas jadual.
  • Jenis — jenis lajur. Sebagai contoh, kami memilih varchar kerana kami akan memasukkan nilai rentetan.
  • Panjang/Nilai - Digunakan untuk menentukan panjang maksimum yang boleh dimiliki oleh entri dalam lajur ini.
  • Indeks - Kami menggunakan indeks "Utama" untuk medan "ID". Apabila membuat jadual, adalah disyorkan untuk menggunakan hanya satu lajur sebagai kunci utama. Ia digunakan untuk menyenaraikan rekod dalam jadual dan diperlukan semasa menyediakan jadual. Saya juga menyatakan "A_I", yang bermaksud "Auto Increment" - parameter untuk menetapkan nombor rekod secara automatik (1,2,3,4...).
    Klik butang "Simpan" dan jadual akan dibuat.

Langkah 2: Tulis kod PHP untuk memasukkan data ke dalam MySQL.

Pilihan 1 - kaedah MySQLi

Mula-mula anda perlu mewujudkan sambungan ke pangkalan data. Selepas ini kami menggunakan pertanyaan SQL INSERT. Contoh kod penuh:

" . mysqli_error($conn); ) mysqli_close($conn); ?>

Bahagian pertama kod (baris 3 - 18) bertujuan untuk menyambung ke pangkalan data.

Mari kita mulakan dengan baris nombor 19:

$sql = "MASUKKAN KE DALAM Pelajar (nama, nama keluarga, e-mel) NILAI ("Thom", "Vial", " [e-mel dilindungi]")";

Ia memasukkan data ke dalam pangkalan data MySQL. INSERT INTO ialah pernyataan yang menambah data pada jadual tertentu. Dalam contoh kami, data ditambahkan pada jadual Pelajar.

Seterusnya ialah senarai lajur di mana nilai dimasukkan: nama, nama keluarga, e-mel. Data akan ditambah mengikut susunan yang ditetapkan. Jika kami telah menulis (e-mel, nama keluarga, nama), nilai akan ditambah dalam susunan yang berbeza.

Bahagian seterusnya ialah pernyataan NILAI. Di sini kami menentukan nilai untuk lajur: nama = Thom, nama keluarga = Vial, e-mel = [e-mel dilindungi].

Kami menjalankan permintaan menggunakan kod PHP. Dalam kod program, pertanyaan SQL mesti dilepaskan dengan petikan. Sekeping kod seterusnya (baris 20-22) menyemak sama ada permintaan kami berjaya:

if (mysqli_query($conn, $sql)) ( echo "Rekod baru berjaya dicipta"; )

Kod ini memaparkan mesej yang menunjukkan permintaan telah berjaya.

Dan bahagian terakhir (baris 22 - 24) memaparkan pemberitahuan jika permintaan tidak berjaya:

else ( echo "Ralat: " . $sql ."
" . mysqli_error($conn); )

Pilihan 2 - Kaedah Objek Data PHP (PDO).

Mula-mula kita perlu menyambung ke pangkalan data dengan mencipta objek PDO baharu. Apabila bekerja dengannya kami akan menggunakan pelbagai kaedah PDO. Kaedah objek dipanggil seperti berikut:

$the_Object->the_Method();

PDO membolehkan anda "menyediakan" kod SQL sebelum ia dilaksanakan. Pertanyaan SQL dinilai dan "diperbetulkan" sebelum dijalankan. Sebagai contoh, serangan suntikan SQL mudah boleh dilakukan dengan hanya memasukkan kod SQL ke dalam medan borang. Sebagai contoh:

Oleh kerana ini adalah SQL yang betul dari segi sintaksis, koma bertitik menjadikan DROP DATABASE user_table pertanyaan SQL baharu dan jadual pengguna digugurkan. Ungkapan yang disediakan (pembolehubah terikat) tidak membenarkan koma bertitik dan petikan untuk menamatkan pertanyaan asal. Oleh itu, perintah DROP DATABASE tidak akan dilaksanakan.

Untuk menggunakan ungkapan yang disediakan, anda perlu menulis pembolehubah baharu yang memanggil kaedah prepare() bagi objek pangkalan data.

Kod yang betul:

getMessage(); ) // Tetapkan pembolehubah untuk orang yang kita mahu tambah pada pangkalan data $first_Name = "Thom"; $last_Name = "Vial"; $emel = " [e-mel dilindungi]"; // Cipta pembolehubah yang memanggil kaedah prepare() objek pangkalan data // Pertanyaan SQL yang anda mahu jalankan dimasukkan sebagai parameter, dan ruang letak ditulis seperti ini: placeholder_name $my_Insert_Statement = $my_Db_Connection->prepare(" INSERT INTO Students ( name, lastname, email) VALUES (:first_name, :last_name, :email)"); // Kami kini memberitahu skrip pembolehubah yang merujuk kepada setiap pemegang tempat untuk menggunakan kaedah bindParam() // Parameter pertama ialah pemegang tempat dalam pernyataan di atas , yang kedua ialah pembolehubah yang sepatutnya merujuk kepada $my_Insert_Statement->bindParam(:first_name, $first_Name); $my_Insert_Statement->bindParam(:last_name, $last_Name); $my_Insert_Statement->bindParam(:email , $email); // Jalankan pertanyaan menggunakan data yang baru kami takrifkan // Kaedah execute() mengembalikan BENAR jika berjaya dan SALAH jika tidak, memberi anda pilihan untuk mencetak mesej if anda sendiri ($my_Insert_Statement->execute() ) ( echo "Rekod baharu berjaya dicipta"; ) else ( echo "Unable to createrecord"; ) // Pada ketika ini anda boleh menukar data pembolehubah dan menjalankan pertanyaan untuk menambah lebih banyak data pada data pangkalan data ke pangkalan data $first_Name = "John"; $last_Name = "Smith"; $emel = " [e-mel dilindungi]"; $my_Insert_Statement->execute(); // Laksanakan sekali lagi apabila pembolehubah diubah jika ($my_Insert_Statement->execute()) ( echo "Rekod baru berjaya dicipta"; ) else ( echo "Tidak dapat mencipta rekod";

Pada baris 28, 29, dan 30, kami menggunakan kaedah bindParam() bagi objek pangkalan data. Terdapat juga kaedah bindValue(), yang sangat berbeza daripada yang sebelumnya.

  • bindParam() - Kaedah ini menilai data apabila kaedah execute() dicapai. Kali pertama skrip mencapai kaedah execute(), ia melihat bahawa $first_Name sepadan dengan "Thom". Kemudian mengikat nilai ini dan menjalankan permintaan. Apabila skrip mencapai kaedah execute() kedua, ia melihat bahawa $first_Name kini sepadan dengan "John". Kemudian ia mengikat nilai ini dan menjalankan pertanyaan semula dengan nilai baharu. Adalah penting untuk diingat bahawa kami telah menentukan pertanyaan sekali dan menggunakannya semula dengan data yang berbeza pada titik yang berbeza dalam skrip.
  • bindValue() - Kaedah ini menilai data sebaik sahaja bindValue() dicapai. Memandangkan $first_Name telah ditetapkan kepada "Thom", apabila bindValue() dicapai, ia akan digunakan setiap kali kaedah execute() dipanggil pada $my_Insert_Statement.
    Perhatikan bahawa kami menggunakan semula pembolehubah $first_Name dan memberikannya nilai baharu untuk kali kedua. Selepas menjalankan skrip, kedua-dua nama akan disenaraikan dalam pangkalan data, walaupun pada hakikatnya pembolehubah $first_Name di hujung skrip mempunyai nilai "John". Ingat bahawa PHP menyemak keseluruhan skrip sebelum ia dijalankan.

Jika anda mengemas kini skrip untuk menggantikan bindParam dengan bindValue, anda akan memasukkan "Thom Vial" ke dalam pangkalan data dua kali dan John Smith akan diabaikan.

Langkah 3 - Sahkan Kejayaan dan Selesaikan Masalah

Jika permintaan untuk memasukkan baris ke dalam pangkalan data berjaya, kami akan melihat mesej berikut:

Menyelesaikan Masalah Ralat Biasa

MySQLi

Dalam sebarang kes lain, mesej ralat akan dipaparkan. Sebagai contoh, mari kita buat satu ralat sintaks dalam kod dan kita akan mendapat yang berikut:

Bahagian pertama kod adalah ok, sambungan telah berjaya diwujudkan, tetapi pertanyaan SQL gagal.

"Ralat: INSERT INTO Students (nama, nama keluarga, e-mel) VALUES ("Thom", "Vial", " [e-mel dilindungi]") Anda mempunyai ralat dalam sintaks SQL anda; semak manual yang sepadan dengan versi pelayan MySQL anda untuk sintaks hak untuk digunakan berhampiran "(nama, nama keluarga, e-mel) NILAI ("Thom", "Vial", " [e-mel dilindungi]")" di baris 1"

Terdapat ralat sintaks yang menyebabkan skrip ranap. Ralat adalah di sini:

$sql = "MASUKKAN KE DALAM Pelajar (nama, nama keluarga, e-mel) NILAI ("Thom", "Vial", " [e-mel dilindungi]")";

Kami menggunakan pendakap kerinting berbanding yang biasa. Ini tidak betul dan skrip menghasilkan ralat sintaks.

PDO

Baris 7 sambungan PDO menetapkan mod ralat kepada "memaparkan semua pengecualian". Jika ditetapkan kepada nilai yang berbeza dan permintaan gagal, kami tidak akan menerima sebarang mesej ralat.

Tetapan ini hanya boleh digunakan semasa membangunkan skrip. Apabila diaktifkan, pangkalan data dan nama jadual mungkin dipaparkan yang paling baik disembunyikan atas sebab keselamatan. Dalam kes yang diterangkan di atas, apabila pendakap kerinting digunakan dan bukannya pendakap biasa, mesej ralat kelihatan seperti ini:

Ralat maut: Uncaughtexception "PDOException" dengan mesej "SQLSTATE: Ralat sintaks atau pelanggaran akses: 1064 Anda mempunyai ralat dalam sintaks SQL anda; semak manualyang sepadan dengan versi pelayan MySQL anda untuk rightsyntax untuk digunakan berhampiran "(nama, nama akhir, e-mel) NILAI ("Thom", "Vial", " [e-mel dilindungi]")" di baris 1"

Masalah lain yang mungkin:

  • Lajur tidak dinyatakan dengan betul (lajur tidak wujud atau nama lajur yang salah eja).
  • Satu jenis nilai diberikan kepada lajur jenis lain. Sebagai contoh, jika anda cuba memasukkan nombor 47 ke dalam lajur Nama, anda akan mendapat ralat. Lajur ini mesti menggunakan nilai rentetan. Tetapi jika kita menentukan nombor dalam petikan (contohnya, "47") ia akan berfungsi, kerana ia adalah rentetan.
  • Percubaan telah dibuat untuk memasukkan data ke dalam jadual yang tidak wujud. Terdapat juga kesilapan ejaan dalam nama jadual.

Selepas berjaya memasukkan data, kita akan melihat bahawa ia telah ditambahkan ke pangkalan data. Di bawah ialah contoh jadual dengan data ditambah.

Kemas kini terakhir: 11/1/2015

Untuk menambah data, gunakan ungkapan "INSERT":

$query ="INSERT INTO goods VALUES(NULL, "Samsung Galaxy III","Samsumg"");

Pernyataan "INSERT" memasukkan satu baris ke dalam jadual. Selepas kata kunci INTO, nama jadual ditunjukkan dan selepas VALUES, set nilai untuk semua lajur ditunjukkan dalam kurungan. Oleh kerana kami mempunyai tiga lajur dalam jadual, kami menunjukkan tiga nilai.

Oleh kerana dalam topik sebelumnya, semasa membuat jadual, kami menetapkan susunan lajur berikut: id, nama, syarikat, dalam kes ini nilai NULL diluluskan untuk lajur id, "Samsung Galaxy III" untuk nama dan "Samsumg" untuk syarikat.

Memandangkan lajur id ditakrifkan sebagai AUTO_INCREMENT, kami tidak perlu memberikan nilai angka tertentu dan boleh melepasi nilai NULL dan MySQL akan menetapkan nilai yang tersedia seterusnya kepada lajur.

Sekarang mari kita lihat menambah data menggunakan contoh. Mari buat fail create.php dengan kandungan berikut:

Data ditambah"; ) // tutup sambungan mysqli_close($link); ) ?>

Tambah model baharu

Masukkan model:

Pengeluar:



Di sini, kod untuk berinteraksi dengan pangkalan data digabungkan dengan fungsi borang: menggunakan borang, kami memasukkan data untuk ditambahkan ke pangkalan data.

Keselamatan dan MySQL

Di sini kami telah menggunakan fungsi mysqli_real_escape_string(). Ia digunakan untuk melepaskan aksara dalam rentetan, yang kemudiannya digunakan dalam pertanyaan SQL. Ia mengambil sebagai parameter objek sambungan dan rentetan untuk dilepaskan.

Oleh itu, kita sebenarnya menggunakan melarikan diri aksara dua kali: pertama untuk ungkapan sql menggunakan mysqli_real_escape_string() fungsi, dan kemudian untuk html menggunakan fungsi htmlentities(). Ini akan membolehkan kami melindungi diri kami daripada dua jenis serangan sekaligus: serangan XSS dan suntikan SQL.

Dan diberi
. Sekarang kita akan bercakap tentang bagaimana tambah imej ke pangkalan data MySQL melalui borang menggunakan PHP.

Mencipta medan dalam pangkalan data MySQL untuk menambah imej

Sebagai permulaan, saya ingin mengatakan bahawa untuk menyimpan imej dalam pangkalan data MySQL Ia adalah perlu untuk menentukan salah satu medan jadual sebagai terbitan jenis BLOB.

Singkatan BLOB bermaksud objek besar binari. Jenis storan data BLOB mempunyai beberapa pilihan:

  • TINYBLOB - Boleh menyimpan sehingga 255 bait
  • BLOB boleh menyimpan sehingga 64 kilobait maklumat
  • MEDIUMBLOB - sehingga 16 megabait
  • LONGBLOB sehingga 4 gigabait

Untuk menyimpan fail imej dalam pangkalan data anda perlu membaca fail ke dalam pembolehubah dan membuat pertanyaan untuk menambah data pada jadual.

Menyediakan borang pada halaman untuk menambah imej pada pangkalan data MySQL

Dalam kes saya tugasnya adalah tambah dua imej ke pangkalan data melalui borang menggunakan PHP. Kami mempunyai borang dengan dua medan dan butang hantar:

form name=”form1″ method=”post” action=”add_image.php”
enctype="multipart/form-data"

Biar saya ingatkan anda bahawa atribut tindakan menentukan fail yang akan melakukan pemuatan fail imej. Atribut enctype menunjukkan cara kandungan borang dikodkan dan maklumat muat naik fail. Lihat cara mengisi atribut dengan betul enctype untuk mengelakkan .

Catatan: sokongan untuk memuat naik berbilang fail telah diperkenalkan dalam versi 3.0.10.

Menulis Kod PHP untuk Menyimpan Imej dalam Pangkalan Data MySQL

Memandangkan kami menghantar dua fail dalam atribut nama selepas perkataan yang kami nyatakan "fail pengguna" dengan kurungan segi empat sama, ini menjelaskan bahawa kami menghantar beberapa fail menggunakan tatasusunan yang mengandungi atribut fail:

$_FILES['fail pengguna']['nama']

Nama fail asal pada mesin klien.

$_FILES['fail pengguna']['jenis']

Jenis mime fail, jika penyemak imbas memberikan maklumat ini.
Contoh: "imej/gif" .

$_FILES['fail pengguna']['saiz']

$_FILES['userfile']['tmp_name']

Nama fail sementara di mana fail yang dimuat turun telah disimpan pada pelayan.

Bagaimana untuk mendapatkan nilai setiap fail?

Sebagai contoh, katakan fail bernama /home/test/1.jpg dan /home/test/2.jpg dihantar.

Dalam kes ini $_FILES[‘fail pengguna’][‘nama’]
akan mengandungi nilai 1.jpg,
dan $_FILES[‘fail pengguna’][‘nama’]
- nilai 2.jpg

Begitu juga, $_FILES[‘userfile’][‘size’] akan mengandungi nilai saiz fail 1.jpg, dan seterusnya. Sekarang mari kita lihat kod fail add_image.php, yang dinyatakan dalam atribut borang tindakan.

1024*1024||$image_size==0) ($ErrorDescription="Setiap imej tidak boleh melebihi 1MB! Imej tidak boleh ditambah ke pangkalan data."; kembalikan ""; ) // Jika fail telah tiba, kemudian semak sama ada grafik // ia (atas sebab keselamatan) if(substr($_FILES["userfile"]["type"][$num], 0, 5)=="imej") ( //Baca kandungan fail $image=file_get_contents($_FILES ["userfile"]["tmp_name"][$num]); // Melarikan diri aksara khas dalam kandungan fail $image=mysql_escape_string($image); return $image; )else( ErrorDescription= "Anda tidak memuat naik imej, jadi ia tidak boleh ditambah."; return ""; ) )else( $ErrorDescription="Anda tidak memuat naik imej, medan kosong, jadi fail tidak boleh ditambah ke pangkalan data. "; return ; ) return $image; ) ?>

Jadi dalam artikel ini kita bercakap tentang cara menyimpan imej dalam pangkalan data MySQL , menggunakan PHP.