Dodavanje podataka iz forme u mysql. Dodavanje slika u MySQL bazu podataka putem PHP-a. Php unos u mysql bazu podataka. Praktični primjeri

U ovom postu želim vam reći, kako unesene podatke u obrazac prenijeti u Bazu podataka. I tako kreiramo jednostavnu formu u kojoj ćemo imati dva polja: ime korisnika i njegov email:

Vaše ime:
Vaš email:


Ova forma se može koristiti za registraciju novog korisnika, za slanje vijesti, za prikupljanje statistike, ili za bilo što... Općenito, korisnik unosi svoje podatke u ovu formu: ime i e-mail, klikne na gumb i zatim podatke ulazi u PHP skriptu:

$name = $_POST["ime"]; $e-pošta = $_POST["e-pošta"]; $result = mysqli_query("UMETNI U VRIJEDNOSTI korisnika (ime, email) ("$name", "$email")"); if ($rezultat) ( echo "Podaci su uspješno spremljeni!"; ) else ( echo "Došlo je do pogreške, molimo pokušajte ponovo."; )


Što se događa u ovoj skripti? Shvatimo sada!
Podaci uneseni u formu se metodom POST prenose u php skriptu (koja je gore napisana), a pomoću globalnog niza $_POST podaci se formiraju u varijable $name i $email:

$name = $_POST["ime"]; $e-pošta = $_POST["e-pošta"];


Nakon što su varijable spremne za unos u bazu, kreiramo zahtjev. Ali prvo, vaše skripte već moraju biti povezane s bazom podataka; napisao sam u ovoj temi kako se povezati s bazom podataka: . Sam zahtjev izgleda ovako:

$result = mysqli_query("UMETNI U VRIJEDNOSTI korisnika (ime, email) ("$name", "$email")");


U ovom smo kodu naznačili da će sljedeće varijable biti dodane u ćelije imena i e-pošte koje se nalaze u tablici korisnika: $name i $email.
Dalje, ako je sve prošlo dobro, dobit ćemo poruku iz uvjeta:

Podaci su uspješno spremljeni!


Ako dođe do problema, a podaci nisu uneseni, dobit ćemo poruku o pogrešci:

Došlo je do greške, pokušajte ponovno.


To je to!

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

Po želji možete dodati još polja za unos podataka, npr. trebamo dodati polje za unos grada korisnika. Već imamo gotovu skriptu (gore napisanu), sada ćemo samo dodati polje Vaš grad, nazovimo varijablu: $city . I tako dalje do obrasca za unos podataka, nakon:

Vaš email:


dodati:

Vaš grad:


U php skripti, nakon:

$e-pošta = $_POST["e-pošta"];


dodati:

$city = $_POST["grad"];


I naravno da ga također dodajemo u zahtjev, ovako:

$result = mysqli_query("UMETNI U VRIJEDNOSTI korisnika (ime, email, grad) ("$name", "$email", "$city")");


Ovo je ono što biste trebali dobiti na kraju:
Obrazac za unos:

Vaše ime:
Vaš email:
Vaš grad:


Skripta:

$name = $_POST["ime"]; $e-pošta = $_POST["e-pošta"]; $city = $_POST["grad"]; $result = mysqli_query("UMETNI U VRIJEDNOSTI korisnika (ime, email, grad) ("$name", "$email", "$city")"); if ($result == true) ( ​​​​echo "Podaci su uspješno spremljeni!"; ) else ( echo "Došlo je do pogreške, pokušajte ponovno."; )


Kao što vidite, ništa komplicirano! Ako je potrebno, možete dodati još jedno polje, pa još jedno, i još jedno...

Ovaj će vam vodič pokazati kako započeti upravljati bazom podataka iz vašeg PHP skripta. Učit ćeš dodavanje zapisa u MySQL tablicu, korištenjem PHP kod. Prije nego počnete, pogledajte naše druge vodiče koji pokrivaju osnovne korake rada s PHP-om i bazama podataka - povezivanje iz PHP-a na MySQL bazu podataka.

Prije nego počnete, provjerite sljedeće:

  • Pristup kontrolnoj ploči vašeg hostinga

Korak 1 - Izrada tablice

Prije svega, moramo napraviti tablicu za vaše podatke. Ovo je vrlo jednostavan postupak koji možete napraviti u phpMyAdmin s upravljačke ploče vašeg hostinga. Već smo obradili proces stvaranja MySQL baze podataka u prethodnom vodiču, pa ćemo taj dio ovdje preskočiti.

Nakon što se prijavite na stranicu phpMyAdmin, vidjet ćete sliku poput ove:

Kreirajmo tablicu s imenom Studenti za našu bazu podataka u266072517_ime. Pomoću gumba možete kreirati novu tablicu Napravi tablicu. Nakon toga, vidjet ćete novu stranicu gdje možete unijeti sve potrebne podatke za svoju tablicu:

Ovo je najjednostavniji način za izradu tablice, za više informacija o strukturi tablice/baze podataka i koje se postavke mogu koristiti za svako polje, pogledajte službenu dokumentaciju phpMyAdmina.

Evo nekoliko jednostavnih objašnjenja polja koja ćemo koristiti:

  • Ime je naziv vašeg polja. Pojavit će se na samom vrhu vaše tablice.
  • Tip– ovdje možete postaviti vrstu polja. Na primjer, mi biramo varchar jer ovdje trebamo unijeti niz s imenom (koji ima slova, a ne brojeve).
  • Duljina/vrijednosti– koristi se za postavljanje maksimalne duljine vašeg unosa u ovom polju.
  • Indeks– koristimo indeks “Primarni” za polje “ID”. Prilikom izrade tablice preporučljivo je imati jedno ID polje. Koristi se za indeksiranje zapisa u tablici kada su odnosi između tablica konfigurirani. Ovdje se također može primijetiti “A_I”, što znači Automatsko povećanje. Ova postavka će automatski povećati indeks (1,2,3,4...).

Klik Uštedjeti i vaša će tablica biti kreirana.

Korak 2 - Napravite PHP kod i dodajte unos u MySQL tablicu

Opcija 1 – MySQLi metoda

Prije svega, trebate uspostaviti vezu s bazom podataka, prema našem prethodnom vodiču. Nakon toga možemo nastaviti sa SQL upitom za dodavanje zapisa u MySQL tablicu − UMETNUTI. Evo cjelovitog primjera koda s načinom spajanja i umetanja:

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

Dakle, prvi dio koda (redovi 3 – 18 ) odnose se na dio za uspostavljanje veze s bazom podataka. Nećemo ponovno prolaziti kroz ovaj dio, ako želite znati što svaki red znači, pogledajte naš prethodni vodič o tome kako se povezati s bazom podataka.

Počnimo s linijom 19 :

$sql = "INSERT INTO Učenici (ime, prezime, email) VRIJEDNOSTI ("Thom", "Bočica", " [e-mail zaštićen]")";

Ovo je najvažnija linija koda, radi sve što pokrivamo u ovom vodiču - dodaje zapis u MySQL tablicu u bazi podataka. UMETNI U je izraz koji dodaje zapis u navedenu tablicu MySQL baze podataka. U našem primjeru dodajemo podatke u tablicu Studenti.

Idemo dalje, u zagradama definiramo polja tablice kojima ćemo dodati vrijednosti: (ime, prezime, email). Podaci će se dodavati određenim redoslijedom. Ako napišemo (e-mail, prezime, ime), vrijednosti će se dodavati drugačijim redoslijedom.

Sljedeći dio značenja VRIJEDNOSTI. Ovdje postavljamo naše vrijednosti u prethodno navedenim poljima. Tako će svako polje dobiti svoju vrijednost. Na primjer, u našem slučaju to bi bilo nešto poput: ime = Thom, prezime = Bočica, e-pošta = [e-mail zaštićen] .

Ono što je važno napomenuti je da se ovdje formiramo SQL upit pomoću PHP koda. SQL upiti moraju biti u navodnicima. U našem primjeru, sve između navodnika i onoga što dolazi nakon $sql = je SQL upit.

Sljedeći dio koda ( 20 – 22 linije) pokreće naš zahtjev i provjerava uspješnost zahtjeva:

If (mysqli_query($conn, $sql)) ( echo "Novi zapis je uspješno kreiran"; )

Prikazuje se poruka o uspjehu ako je upit ispravno pokrenut.

I završni dio ( 22 – 24 linije) prikazuju drugu poruku u slučaju da naš zahtjev ne uspije:

Else ( echo "Pogreška: " . $sql . "
" . mysqli_error($conn); )

Ovaj kod nam prikazuje poruku o pogrešci u slučaju da nešto pođe krivo.

Opcija 2 – PHP Data Object Method (P HP Data O bject)

Kao i u prethodnom primjeru, prvo trebamo uspostaviti vezu s bazom podataka, što se radi prilikom kreiranja novog PDO objekta - prethodni vodič govori o tome kako se to događa. Budući da je veza MySQL baze podataka PDO objekt, moramo koristiti različite PDO 'metode' (vrsta funkcija koje su dio određenog objekta) za pripremu i pokretanje upita. Objektne metode nazivaju se ovako:

$the_Object->the_Method();

PDO vam omogućuje da 'pripremite' SQL kod prije nego što ga izvršite. SQL upit se procjenjuje i prilagođava prije pokretanja. Stoga se jednostavan napad SQL injekcijom može izvesti ispunjavanjem SQL koda u polju obrasca. Na primjer:

// Korisnik ovo upisuje u polje korisničkog imena obrasca za prijavu thom"; DROP DATABASE user_table; // Konačni upit postaje ovo "SELECT * FROM user_table WHERE username = thom"; DROP DATABASE user_table;

Budući da je SQL kod sintaktički ispravan, točka-zarez čini DROP DATABASE korisnička_tablica novi SQL upit i vaša tablica korisnika je izbrisana. Pripremljeni izrazi ne dopuštaju znakove I ; ispuniti izvorni zahtjev i upute ISPUSTI BAZU PODATAKA nikada neće biti izvršena.

Uvijek Koristite pripremljene upite kada šaljete ili primate podatke iz baze podataka s PDO.

Da biste koristili pripremljene izraze, morate stvoriti novu varijablu koja će pozvati metodu pripremiti() na objekt baze podataka.

U ispravnom obliku kod izgleda ovako:

$servername = "mysql.hostinger.com"; $baza podataka = "u266072517_name"; $korisničko ime = "u266072517_korisnik"; $lozinka = "buystuffpwd"; $sql = "mysql:host=$servername;dbname=$database;"; $dsn_Opcije = ; // Kreirajte novu vezu s MySQL bazom podataka koristeći PDO, $my_Db_Connection je pokušaj objekta ( $my_Db_Connection = new PDO($sql, $username, $password, $dsn_Options); echo "Uspješno spojeno"; ) catch (PDOException $ error) ( echo "Connection error: " . $error->getMessage(); ) // Postavite varijable za osobu koju želimo dodati u bazu podataka $first_Name = "Thom"; $last_Name = "Bočica"; $e-pošta = " [e-mail zaštićen]"; // Ovdje stvaramo varijablu koja poziva metodu pripreme() objekta baze podataka // SQL upit koji želite pokrenuti unosi se kao parametar, a rezervirana mjesta se pišu ovako: placeholder_name $my_Insert_Statement = $my_Db_Connection-> preparat("INSERT INTO Students (ime, prezime, email) VALUES (:first_name, :last_name, :email)" // Sada kažemo skripti na koju se varijablu svako mjesto zapravo odnosi pomoću metode bindParam() // Prvo parametar je rezervirano mjesto u gornjoj izjavi - drugi parametar je varijabla na koju bi se trebao odnositi $my_Insert_Statement->bindParam(:first_name, $first_Name); $my_Insert_Statement->bindParam(:last_name, $last_Name); , $email); // Izvršite upit pomoću podataka koje smo upravo definirali // Metoda execute() vraća TRUE ako je uspješna i FALSE ako nije, što vam omogućuje da ovdje pišete vlastite poruke ako ( $my_Insert_Statement-> execute()) ( echo "Novi zapis je uspješno kreiran"; ) else ( echo "Nije moguće stvoriti zapis"; ) // U ovom trenutku možete promijeniti podatke varijabli i ponovno izvršiti kako biste dodali više podataka u bazu podataka $first_Name = "John"; $prezime = "Smith"; $e-pošta = " [e-mail zaštićen]"; $my_Insert_Statement->execute(); // Izvrši ponovno sada kada su se varijable promijenile if ($my_Insert_Statement->execute()) ( echo "Novi zapis je uspješno kreiran"; ) else ( echo "Nije moguće stvoriti zapis"; )

U redovima 28, 29 i 30 koristimo metodu bindParam() objekt baze podataka. Postoji i metoda bindValue(), drugačiji od prethodnog.

  • bindParam() – ova metoda broji podatke kada metoda izvršiti() postignuto. Prvi put kada skripta dođe do metode izvršiti() on to vidi $first_Name upućuje na “Thom”, veže tu vrijednost i izvršava upit. Kada skripta drugi put dođe do metode izvršiti(), on tako izgleda $first_Name sada referencira "Ivan", povezuje tu vrijednost i ponovno pokreće upit s novom vrijednošću. Važno je razumjeti da zahtjev kreiramo jednom i zatim zamijenimo različite podatke na različitim mjestima u skripti.
  • bindValue() – ova metoda izračunava podatke čim dođu na red. Budući da vrijednost $first_Name je postavljen na "Thom" u trenutku kada smo došli do metode bindValue(), koristit će se pri pozivanju metode izvršiti() Za $my_Insert_Statement.

Imajte na umu da ponovno koristimo varijablu $first_Name i drugi put mu dati novu vrijednost. Ako provjerite svoju bazu podataka nakon pokretanja ove skripte, oba navedena imena bit će tamo, suprotno vrijednosti ove varijable $first_Name bit će jednako "Ivan" na kraju ove skripte. Zapamtite da PHP procjenjuje sadržaj skripte prije nego što se pokrene.

Ako promijenite skriptu zamjenom bindParam na bindValue, dvaput ćete dodati “Thom Vial” u MySQL bazu podataka i John Smith će biti zanemaren.

Korak 3 - Provjerite uspjeh i riješite opće probleme

Ako je upit koji smo pokrenuli u MySQL bazi podataka bio uspješan, vidjet ćemo sljedeću poruku:

Rješavanje uobičajenih pogrešaka

MySQLi

U svakom drugom slučaju, umjesto gornje poruke prikazat će se poruka o pogrešci. Na primjer, napravimo jednu sintaktičku pogrešku u našem kodu i dobit ćemo ovo:

Kao što vidimo, prvi dio koda je u redu, veza je uspješno uspostavljena, ali je naš SQL upit naišao na grešku prilikom izvršenja.

"Pogreška: INSERT INTO Students (ime, prezime, email) VALUES ("Thom", "Vial", " [e-mail zaštićen]") Imate pogrešku u svojoj SQL sintaksi; provjerite priručnik koji odgovara verziji vašeg MySQL poslužitelja za ispravnu sintaksu za korištenje u blizini "(ime, prezime, e-pošta) VRIJEDNOSTI ("Thom", "Vial", " [e-mail zaštićen]")" u retku 1"

Došlo je do pogreške u sintaksi koja uzrokuje neuspjeh naše skripte. Greška je bila ovdje:

$sql = "INSERT INTO Učenici (ime, prezime, email) VRIJEDNOSTI ("Thom", "Bočica", " [e-mail zaštićen]")";

Kao što vidite, koristimo vitičaste zagrade umjesto zagrada. To je netočno i dovodi do sintaktičke pogreške u našoj skripti.

PDO

U liniji 7 PDO veze, način rada s pogreškama postavljen je na 'prikaži sve iznimke'. Ako ovo uklonite iz skripte i zahtjev ne uspije, nećete primiti nikakvu poruku o pogrešci. Uz omogućene iznimke, bit će prikazani specifični problemi na koje ste naišli. Ovo se općenito najbolje koristi pri razvoju skripte jer može otkriti nazive baza podataka i tablica koje želite sakriti od bilo koga tko bi mogao neovlašteno pristupiti vašim podacima. U gornjem slučaju, kada su umjesto zagrada korištene vitičaste zagrade, pogreška izgleda ovako:

Fatalna pogreška: Neuhvaćena iznimka "PDOException" s porukom "SQLSTATE: Sintaksna pogreška ili kršenje pristupa: 1064 Imate pogrešku u svojoj SQL sintaksi; provjerite priručnik koji odgovara vašoj verziji MySQL poslužitelja za ispravnu sintaksu za korištenje u blizini "(ime, prezime, e-pošta) VRIJEDNOSTI ("Thom", "Vial", " [e-mail zaštićen]")" u retku 1"

Ostali problemi na koje možete naići:

  • Polja su netočno navedena (nepostojeća polja ili pogrešno napisana imena).
  • Vrsta vrijednosti ne odgovara vrsti polja. Na primjer, kada želimo dodijeliti vrijednost broja 47 polje Ime, dobit ćemo pogrešku jer se očekuje da vrijednost bude niz. Ali, ako navedete broj pod navodnicima, na primjer, “47” , neće biti pogreške jer će naš broj biti zapisan kao niz u ovom polju.
  • Pokušaj unosa podataka u tablicu koja ne postoji ili greška u pisanju naziva tablice.

Sve te pogreške mogu se popraviti slijedeći upute za ispravljanje pogrešaka ili provjerom zapisnika pogrešaka.

Nakon uspješnog dodavanja podataka, trebali bismo ih vidjeti u našoj bazi podataka. Evo primjera tablice u koju smo dodali naše podatke, gledajući je phpMyAdmin.

Zaključak

U ovom vodiču ste naučili kako koristiti PHP kod za dodavanje zapisa u MySQL tablicu korištenjem MySQLi I PDO. Također smo pogledali uobičajene pogreške i njihova rješenja. Znati kako koristiti PHP kod za dodavanje u MySQL bazu podataka dobro će vam doći bilo da učite programirati ili već izrađujete vlastitu web stranicu.

U ovom članku ćemo pogledati kako koristiti PHP za umetanje redaka u MySQL bazu podataka.

Korak 1 - Izrada tablice

Najprije morate izraditi tablicu za podatke. Ovo je jednostavan postupak koji se može obaviti pomoću phpMyAdmin-a na kontrolnoj ploči hostinga.

Nakon prijave u phpMyAdmin vidjet ćete ovo sučelje:

Kreirajmo tablicu pod nazivom Studenti u bazi podataka u266072517_name klikom na gumb "Stvori tablicu". Nakon toga, vidjet ćemo novu stranicu na kojoj postavljamo sve potrebne parametre tablice:

Ovo je najjednostavnija postavka koja se može koristiti za tablicu i dobiti više informacija o strukturi tablice/baze podataka.

Opcije stupaca:

  • Naziv je naziv stupca koji se pojavljuje na vrhu tablice.
  • Vrsta — vrsta stupca. Na primjer, odabrali smo varchar jer ćemo unositi vrijednosti niza.
  • Duljina/vrijednosti - Koristi se za određivanje maksimalne duljine koju unos u ovom stupcu može imati.
  • Indeks - Koristili smo indeks "Primarni" za polje "ID". Prilikom izrade tablice preporuča se koristiti samo jedan stupac kao primarni ključ. Koristi se za ispisivanje zapisa u tablici i potreban je prilikom postavljanja tablice. Zabilježio sam i “A_I”, što znači “Auto Increment” - parametar za automatsko dodjeljivanje brojeva zapisa (1,2,3,4...).
    Kliknite gumb "Spremi" i tablica će biti kreirana.

Korak 2: Napišite PHP kod za umetanje podataka u MySQL.

Opcija 1 - MySQLi metoda

Prvo morate uspostaviti vezu s bazom podataka. Nakon toga koristimo SQL INSERT upit. Cijeli primjer koda:

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

Prvi dio koda (red 3 - 18) namijenjen je povezivanju s bazom podataka.

Počnimo s redom broj 19:

$sql = "INSERT INTO Učenici (ime, prezime, email) VRIJEDNOSTI ("Thom", "Bočica", " [e-mail zaštićen]")";

Umeće podatke u MySQL bazu podataka. INSERT INTO je naredba koja dodaje podatke u određenu tablicu. U našem primjeru podaci se dodaju u tablicu Studenti.

Slijedi popis stupaca u koje su umetnute vrijednosti: ime, prezime, e-mail. Podaci će se dodavati navedenim redoslijedom. Da smo napisali (email, prezime, ime), vrijednosti bi bile dodane drugim redoslijedom.

Sljedeći dio je iskaz VRIJEDNOSTI. Ovdje navodimo vrijednosti za stupce: ime = Thom, prezime = bočica, e-pošta = [e-mail zaštićen].

Zahtjev smo pokrenuli pomoću PHP koda. U programskom kodu, SQL upiti moraju biti označeni navodnicima. Sljedeći dio koda (linija 20-22) provjerava je li naš zahtjev bio uspješan:

if (mysqli_query($conn, $sql)) ( echo "Novi zapis uspješno kreiran"; )

Ovaj kod prikazuje poruku koja pokazuje da je zahtjev bio uspješan.

I posljednji dio (redak 22 - 24) prikazuje obavijest ako zahtjev nije bio uspješan:

else ( echo "Pogreška: " . $sql . "
" . mysqli_error($conn); )

Opcija 2 - PHP Data Object (PDO) metoda

Prvo se moramo spojiti na bazu podataka kreiranjem novog PDO objekta. U radu s njim koristit ćemo različite PDO metode. Objektne metode se pozivaju na sljedeći način:

$the_Object->the_Method();

PDO vam omogućuje da "pripremite" SQL kod prije nego što se izvrši. SQL upit se procjenjuje i "ispravlja" prije pokretanja. Na primjer, jednostavan napad SQL injekcijom može se izvesti jednostavnim unosom SQL koda u polje obrasca. Na primjer:

Budući da je ovo sintaktički ispravan SQL, točka sa zarezom čini DROP DATABASE user_table novim SQL upitom i korisnička tablica se ispušta. Pripremljeni izrazi (vezane varijable) ne dopuštaju da točka-zarez i navodnici završe izvorni upit, stoga se naredba DROP DATABASE nikada neće izvršiti.

Da biste koristili pripremljene izraze, trebate napisati novu varijablu koja poziva metodu pripreme() objekta baze podataka.

Ispravan kod:

getMessage(); ) // Postavljanje varijabli za osobu koju želimo dodati u bazu $first_Name = "Thom"; $last_Name = "Bočica"; $e-pošta = " [e-mail zaštićen]"; // Stvorite varijablu koja poziva metodu priprave() objekta baze podataka // SQL upit koji želite pokrenuti unosi se kao parametar, a rezervirana mjesta napisana su ovako: placeholder_name $my_Insert_Statement = $my_Db_Connection->prepare(" INSERT INTO Students (ime, prezime, email) VALUES (:first_name, :last_name, :email)"); // Sada kažemo skripti koja se varijabla odnosi na svako rezervirano mjesto da koristi metodu bindParam() // Prvi parametar je rezervirano mjesto u gornjoj izjavi, druga je varijabla na koju se treba odnositi $my_Insert_Statement->bindParam(:first_name, $first_Name); $my_Insert_Statement->bindParam(:last_name, $last_Name); upravo definirano // Metoda execute() vraća TRUE ako uspije i FALSE ako ne uspije, dajući vam mogućnost ispisa vlastite if poruke ($my_Insert_Statement->execute()) ( echo "New recordcreatedsuccessfully"; ) else ( echo "Unable to createrecord"; ) // U ovom trenutku možete promijeniti podatke varijable i pokrenuti upit za dodavanje više podataka u bazu podataka data u bazu podataka $first_Name = "John"; $prezime = "Smith"; $e-pošta = " [e-mail zaštićen]"; $my_Insert_Statement->execute(); // Izvrši ponovno kada se varijabla promijeni if ​​($my_Insert_Statement->execute()) ( echo "Novi zapis uspješno kreiran"; ) else ( echo "Nije moguće stvoriti zapis";

U redovima 28, 29 i 30 koristimo metodu bindParam() objekta baze podataka. Postoji i metoda bindValue(), koja se jako razlikuje od prethodne.

  • bindParam() - Ova metoda procjenjuje podatke kada se dosegne metoda execute(). Prvi put kada skripta dođe do metode execute(), vidi da $first_Name odgovara "Thom". Zatim veže ovu vrijednost i pokreće zahtjev. Kada skripta dođe do druge metode execute(), vidi da $first_Name sada odgovara "John". Zatim veže ovu vrijednost i ponovno pokreće upit s novim vrijednostima. Važno je zapamtiti da smo jednom definirali upit i ponovno ga upotrijebili s različitim podacima na različitim mjestima u skripti.
  • bindValue() - Ova metoda procjenjuje podatke kada se dosegne bindValue(). Budući da je $first_Name postavljen na "Thom", kada se dosegne bindValue(), koristit će se svaki put kada se pozove metoda execute() na $my_Insert_Statement.
    Primijetite da ponovno koristimo varijablu $first_Name i po drugi put joj dodjeljujemo novu vrijednost. Nakon pokretanja skripte, oba će imena biti naznačena u bazi podataka, unatoč činjenici da varijabla $first_Name na kraju skripte ima vrijednost "John". Zapamtite da PHP provjerava cijelu skriptu prije nego što se pokrene.

Ako ažurirate skriptu za zamjenu bindParam s bindValue, dvaput ćete umetnuti "Thom Vial" u bazu podataka i John Smith će biti zanemaren.

Korak 3 - Potvrdite uspjeh i riješite probleme

Ako je zahtjev za umetanje redaka u bazu podataka bio uspješan, vidjet ćemo sljedeću poruku:

Rješavanje uobičajenih pogrešaka

MySQLi

U svakom drugom slučaju prikazat će se poruka o pogrešci. Na primjer, napravimo jednu sintaktičku pogrešku u kodu i dobit ćemo sljedeće:

Prvi dio koda je u redu, veza je uspješno uspostavljena, ali SQL upit nije uspio.

"Pogreška: INSERT INTO Students (ime, prezime, email) VALUES ("Thom", "Vial", " [e-mail zaštićen]") Imate pogrešku u svojoj SQL sintaksi; provjerite priručnik koji odgovara verziji vašeg MySQL poslužitelja za sintaksu prava za korištenje u blizini "(ime, prezime, e-pošta) VRIJEDNOSTI ("Thom", "Vial", " [e-mail zaštićen]")" u retku 1"

Došlo je do sintaktičke pogreške koja je uzrokovala rušenje skripte. Greška je bila ovdje:

$sql = "INSERT INTO Učenici (ime, prezime, email) VRIJEDNOSTI ("Thom", "Bočica", " [e-mail zaštićen]")";

Koristili smo vitičaste zagrade umjesto običnih. Ovo je netočno i skripta je generirala sintaktičku pogrešku.

PDO

Linija 7 PDO veze postavlja način pogreške na "prikaži sve iznimke". Ako je postavljena na drugu vrijednost i zahtjev nije uspio, nećemo primiti nikakve poruke o pogrešci.

Ovu postavku treba koristiti samo pri razvoju skripte. Kada se aktiviraju, mogu se prikazati nazivi baza podataka i tablica koje je najbolje sakriti iz sigurnosnih razloga. U gore opisanom slučaju, kada su korištene vitičaste zagrade umjesto običnih zagrada, poruka o pogrešci izgleda ovako:

Fatalna pogreška: Uncaughtexception "PDOException" s porukom "SQLSTATE: Syntax error or accessviolation: 1064 Imate pogrešku u svojoj SQL sintaksi; provjerite priručnik koji odgovara vašoj verziji MySQL poslužitelja za sintaksu prava za korištenje u blizini "(ime, prezime, e-pošta) VRIJEDNOSTI ("Thom", "Bočica", " [e-mail zaštićen]")" u retku 1"

Ostali mogući problemi:

  • Stupci su netočno navedeni (nepostojeći stupci ili pogrešno napisani nazivi stupaca).
  • Jedan tip vrijednosti dodijeljen je stupcu drugog tipa. Na primjer, ako pokušate umetnuti broj 47 u stupac Naziv, dobit ćete pogrešku. Ovaj stupac mora koristiti vrijednost niza. Ali ako smo naveli broj pod navodnicima (na primjer, "47"), to bi funkcioniralo, jer je to niz.
  • Pokušan je unos podataka u tablicu koja ne postoji. Došlo je i do pravopisne pogreške u nazivu tablice.

Nakon uspješnog unosa podataka vidjet ćemo da su dodani u bazu. Ispod je primjer tablice s dodanim podacima.

Zadnja izmjena: 1.11.2015

Za dodavanje podataka upotrijebite izraz "INSERT":

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

Naredba INSERT umeće jedan red u tablicu. Nakon ključne riječi INTO naveden je naziv tablice, a nakon VALUES u zagradama je naveden skup vrijednosti za sve stupce. Budući da u tablici imamo tri stupca, označavamo tri vrijednosti.

Budući da smo u prethodnoj temi prilikom kreiranja tablice odredili sljedeći redoslijed stupaca: id, name, company, u ovom slučaju vrijednost NULL se prosljeđuje za id stupac, “Samsung Galaxy III” za ime i “Samsumg” za društvo.

Budući da je id stupac definiran kao AUTO_INCREMENT, ne moramo mu dati određenu numeričku vrijednost i možemo proslijediti NULL vrijednost i MySQL će dodijeliti sljedeću dostupnu vrijednost stupcu.

Sada pogledajmo dodavanje podataka pomoću primjera. Kreirajmo datoteku stvoriti.php sa sljedećim sadržajem:

Podaci dodani"; ) // zatvorite vezu mysqli_close($link); ) ?>

Dodajte novi model

Unesite model:

Proizvođač:



Ovdje se kod za interakciju s bazom podataka kombinira s funkcionalnošću obrazaca: pomoću obrasca unosimo podatke koji se dodaju u bazu podataka.

Sigurnost i MySQL

Ovdje smo koristili funkciju mysqli_real_escape_string(). Služi za izbjegavanje znakova u nizu, koji se zatim koristi u SQL upitu. Kao parametre uzima objekt veze i niz koji treba izbjeći.

Dakle, zapravo dvaput koristimo izlaz znakova: prvo za sql izraz pomoću funkcije mysqli_real_escape_string(), a zatim za html pomoću funkcije htmlentities(). To će nam omogućiti da se zaštitimo od dvije vrste napada odjednom: XSS napada i SQL injekcija.

I dano
. Sada ćemo razgovarati o tome kako dodajte slike u MySQL bazu podataka putem obrasca koristeći PHP.

Stvaranje polja u MySQL bazi podataka za dodavanje slike

Za početak, želim reći da za pohranjivanje slika u MySQL bazu podataka Potrebno je jedno od polja tablice definirati kao izvedenicu tipa BLOB.

Kratica BLOB označava binarni veliki objekt. Vrsta pohrane podataka BLOB ima nekoliko opcija:

  • TINYBLOB - Može pohraniti do 255 bajtova
  • BLOB može pohraniti do 64 kilobajta informacija
  • MEDIUMBLOB - do 16 megabajta
  • LONGBLOB do 4 gigabajta

Za pohranjivanje slikovne datoteke u bazu podataka trebate pročitati datoteku u varijablu i stvoriti upit za dodavanje podataka u tablicu.

Priprema obrasca na stranici za dodavanje slike u MySQL bazu podataka

U mom slučaju zadatak je bio dodajte dvije slike u bazu putem obrasca pomoću PHP-a. Imamo obrazac s dva polja i gumbom za slanje:

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

Dopustite mi da vas podsjetim da atribut akcijski specificira datoteku koja će izvršiti učitavanje slikovnih datoteka. Atribut enctype označava kako je sadržaj obrasca kodiran i informacije o prijenosu datoteke. Pogledajte kako ispravno ispuniti atribut enctype kako bi se izbjeglo.

Bilješka: podrška za učitavanje više datoteka uvedena je u verziji 3.0.10.

Pisanje PHP koda za spremanje slike u MySQL bazu podataka

Budući da šaljemo dvije datoteke u atributu ime nakon riječi označavamo "userfile" uglatim zagradama, to jasno pokazuje da šaljemo nekoliko datoteka koristeći niz koji sadrži atribute datoteke:

$_FILES['userfile']['name']

Izvorni naziv datoteke na klijentskom računalu.

$_FILES['userfile']['type']

Mime tip datoteke, ako je preglednik dao te podatke.
Primjer: "slika/gif" .

$_FILES['userfile']['size']

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

Privremeni naziv datoteke pod kojim je preuzeta datoteka spremljena na poslužitelju.

Kako doći do vrijednosti svake datoteke?

Na primjer, pretpostavimo da su poslane datoteke pod nazivom /home/test/1.jpg i /home/test/2.jpg.

U ovom slučaju $_FILES['userfile']['name']
sadržavat će vrijednost 1.jpg,
i $_FILES['userfile']['name']
- vrijednost 2.jpg

Isto tako, $_FILES['userfile']['size'] će sadržavati vrijednost veličine datoteke 1.jpg, i tako dalje. Sada pogledajmo kod datoteke add_image.php, koja je navedena u atributu obrasca akcijski.

1024*1024||$image_size==0) ( $ErrorDescription="Svaka slika ne smije premašiti 1MB! Slika se ne može dodati u bazu."; return ""; ) // Ako je datoteka stigla, provjerite je li grafika // to (iz sigurnosnih razloga) if(substr($_FILES["userfile"]["type"][$num], 0, 5)=="image") ( //Pročitajte sadržaj datoteke $image=file_get_contents($_FILES["tmp_name"][$num]); //Izbjeći posebne znakove u sadržaju datoteke $image=mysql_escape_string($image); return $image; )else( ErrorDescription= "Niste učitali sliku, pa se ne može dodati."; return ""; )else( $ErrorDescription="Niste učitali sliku, polje je prazno, pa se datoteka ne može dodati u bazu podataka ."; return ; ) return $image; ) ?>

Stoga smo u ovom članku govorili o tome kako spremiti sliku u MySQL bazu podataka , koristeći PHP.