Php form para sa pagdaragdag ng data sa database. Php entry sa mysql database. Mga praktikal na halimbawa. Di-wastong uri ng data

Ipapakita sa iyo ng gabay na ito kung paano simulan ang pamamahala ng isang database mula sa iyong PHP script. Mag-aaral ka pagdaragdag ng isang tala sa isang talahanayan ng MySQL, gamit PHP code. Bago ka magsimula, tingnan ang aming iba pang mga tutorial na sumasaklaw sa mga pangunahing hakbang ng pagtatrabaho sa PHP at mga database - pagkonekta mula sa PHP sa isang MySQL database.

Bago ka magsimula, suriin para sa mga sumusunod:

  • Access sa iyong hosting control panel

Hakbang 1 - Paglikha ng Table

Una sa lahat, kailangan naming lumikha ng isang talahanayan para sa iyong data. Ito ay isang napaka-simpleng pamamaraan na maaari mong gawin phpMyAdmin mula sa iyong control panel sa pagho-host. Nasaklaw na namin ang proseso ng paglikha ng MySQL database sa isang nakaraang tutorial, kaya laktawan namin ang bahaging iyon dito.

Pagkatapos mag-log in sa pahina ng phpMyAdmin, makikita mo ang isang larawang tulad nito:

Gumawa tayo ng table na may pangalan Mga mag-aaral para sa aming database u266072517_name. Maaari kang lumikha ng bagong talahanayan gamit ang pindutan Lumikha ng Talahanayan. Pagkatapos nito, makakakita ka ng bagong pahina kung saan maaari mong ilagay ang lahat ng kinakailangang data para sa iyong talahanayan:

Ito ang pinakasimpleng paraan upang lumikha ng talahanayan, para sa karagdagang impormasyon sa istraktura ng talahanayan/database at kung anong mga setting ang maaaring gamitin para sa bawat field, mangyaring sumangguni sa opisyal na dokumentasyon ng phpMyAdmin.

Narito ang ilang simpleng paliwanag ng mga field na gagamitin namin:

  • Pangalan ay ang pangalan ng iyong field. Lalabas sa pinakatuktok ng iyong mesa.
  • Uri– dito maaari mong itakda ang uri ng field. Halimbawa, pipili tayo varchar dahil dito kailangan nating magpasok ng isang string na may pangalan (na may mga titik, hindi mga numero).
  • Haba/Mga Halaga– ginagamit upang itakda ang maximum na haba ng iyong entry sa field na ito.
  • Index– ginagamit namin ang "Pangunahing" index para sa aming field na "ID". Kapag gumagawa ng talahanayan, inirerekomenda na magkaroon ng isang field ng ID. Ito ay ginagamit upang i-index ang mga tala sa isang talahanayan kapag ang mga relasyon sa pagitan ng mga talahanayan ay na-configure. Mapapansin din dito "A_ako", ibig sabihin Auto Increment. Awtomatikong tataas ng setting na ito ang index (1,2,3,4...).

I-click I-save at ang iyong talahanayan ay malilikha.

Hakbang 2 - Lumikha ng PHP code at magdagdag ng entry sa MySQL table

Pagpipilian 1 – Paraan ng MySQLi

Una sa lahat, kailangan mong magtatag ng isang koneksyon sa database, ayon sa aming nakaraang tutorial. Pagkatapos nito, maaari tayong magpatuloy sa query ng SQL upang magdagdag ng tala sa talahanayan ng MySQL − INSERT. Narito ang isang kumpletong halimbawa ng code na may koneksyon at paraan ng pagpapasok:

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

Kaya, ang unang bahagi ng code (mga linya 3 – 18 ) sumangguni sa bahagi ng pagtatatag ng koneksyon sa database. Hindi na namin dadaan ang bahaging ito, kung gusto mong malaman kung ano ang ibig sabihin ng bawat linya, sumangguni sa aming nakaraang gabay kung paano kumonekta sa isang database.

Magsimula tayo sa linya 19 :

$sql = "INSERT INTO Students (pangalan, apelyido, email) VALUES ("Thom", "Vial", " [email protected]")";

Ito ang pinakamahalagang linya ng code, ginagawa nito ang lahat ng nasasakupan namin sa tutorial na ito - pagdaragdag ng record sa isang MySQL table sa database. INSERT SA ay isang expression na nagdaragdag ng isang tala sa tinukoy na talahanayan ng database ng MySQL. Sa aming halimbawa, nagdaragdag kami ng data sa isang talahanayan Mga mag-aaral.

Sa karagdagang paglipat, sa mga panaklong, tinukoy namin ang mga patlang ng talahanayan kung saan kami magdaragdag ng mga halaga: (pangalan, apelyido, email). Ang data ay idaragdag sa isang partikular na pagkakasunud-sunod. Kung magsusulat tayo (email, apelyido, pangalan), ang mga halaga ay idaragdag sa ibang pagkakasunud-sunod.

Susunod na bahagi ng kahulugan MGA HALAGA. Dito namin itinakda ang aming mga halaga sa naunang tinukoy na mga patlang. Kaya, ang bawat field ay makakatanggap ng sarili nitong halaga. Halimbawa, sa aming kaso ito ay magiging katulad ng: pangalan = Thom, apelyido = Vial, email = [email protected] .

Ang mahalagang tandaan ay dito tayo nabubuo SQL query gamit ang PHP code. Ang mga query sa SQL ay dapat na nakapaloob sa mga quote. Sa aming halimbawa, ang lahat sa pagitan ng mga quote at darating pagkatapos ng $sql = ay isang SQL query.

Ang susunod na bahagi ng code ( 20 – 22 lines) pinapatakbo ang aming kahilingan at sinusuri ang tagumpay ng kahilingan:

If (mysqli_query($conn, $sql)) ( echo "Matagumpay na nalikha ang bagong record"; )

Ang isang mensahe ng tagumpay ay ipinapakita kung ang query ay pinatakbo nang tama.

At ang huling bahagi ( 22 – 24 lines) magpakita ng isa pang mensahe kung sakaling mabigo ang aming kahilingan:

Iba pa ( echo "Error: " . $sql ."
" . mysqli_error($conn); )

Ang code na ito ay nagpapakita sa amin ng isang mensahe ng error kung sakaling may magkamali.

Opsyon 2 – Paraan ng Bagay sa Data ng PHP (P HP D ata O bject)

Tulad ng sa nakaraang halimbawa, kailangan muna nating gumawa ng isang koneksyon sa database, na ginagawa kapag lumilikha ng isang bagong object ng PDO - ang nakaraang tutorial ay nagsasalita tungkol sa kung paano ito nangyayari. Dahil ang koneksyon sa database ng MySQL ay isang bagay na PDO, dapat tayong gumamit ng iba't ibang 'paraan' ng PDO (isang uri ng mga function na bahagi ng isang partikular na bagay) upang ihanda at patakbuhin ang query. Ang mga pamamaraan ng object ay tinatawag na ganito:

$the_Object->the_Method();

Pinapayagan ka ng PDO na 'maghanda' ng SQL code bago ito isagawa. Ang SQL query ay sinusuri at inaayos bago tumakbo. Kaya, ang isang simpleng pag-atake ng SQL injection ay maaaring gawin sa pamamagitan ng pagpuno ng SQL code sa isang field ng form. Halimbawa:

// Isinusulat ito ng user sa field ng username ng isang login form thom"; DROP DATABASE user_table; // Ang huling query ay nagiging ito "PUMILI * FROM user_table WHERE username = thom"; DROP DATABASE user_table;

Dahil ang SQL code ay syntactically tama, ang semicolon ay gumagawa DROP DATABASE user_table bagong SQL query at ang iyong talahanayan ng mga user ay tinanggal. Hindi pinapayagan ng mga inihandang expression ang mga character At ; upang makumpleto ang orihinal na kahilingan, at ang pagtuturo DROP DATABASE ay hindi kailanman mapapatupad.

Laging Gumamit ng mga inihandang query kapag nagpapadala o tumatanggap ng data mula sa isang database na may PDO.

Upang gumamit ng mga inihandang expression, kailangan mong lumikha ng bagong variable na tatawag sa pamamaraan maghanda() sa object ng database.

Sa tamang anyo ang code ay mukhang:

$servername = "mysql.hostinger.com"; $database = "u266072517_name"; $username = "u266072517_user"; $password = "buystuffpwd"; $sql = "mysql:host=$servername;dbname=$database;"; $dsn_Options = ; // Lumikha ng bagong koneksyon sa MySQL database gamit ang PDO, $my_Db_Connection ay isang object try ($my_Db_Connection = bagong PDO($sql, $username, $password, $dsn_Options); echo "Matagumpay na nakakonekta"; ) catch (PDOException $ error) ( echo "Error sa koneksyon: " . $error->getMessage(); ) // Itakda ang mga variable para sa taong gusto nating idagdag sa database $first_Name = "Thom"; $last_Name = "Vial"; $email = " [email protected]"; // Dito lumikha kami ng isang variable na tumatawag sa paraan ng paghahanda () ng object ng database // Ang SQL query na gusto mong patakbuhin ay ipinasok bilang parameter, at ang mga placeholder ay nakasulat tulad nito: placeholder_name $my_Insert_Statement = $my_Db_Connection-> prepare("INSERT INTO Students (pangalan, apelyido, email) VALUES (:first_name, :last_name, :email)"); // Ngayon sasabihin namin sa script kung aling variable ang aktwal na tinutukoy ng bawat placeholder gamit ang bindParam() method // Una ang parameter ay ang placeholder sa pahayag sa itaas - ang pangalawang parameter ay isang variable na dapat itong sumangguni sa $my_Insert_Statement->bindParam(:first_name, $first_Name->bindParam(:last_name, $last_Name(:email); , $email); // Isagawa ang query gamit ang data na kakatukoy lang namin // Ang execute() method ay nagbabalik ng TAMA kung ito ay matagumpay at FALSE kung ito ay hindi, na nagpapahintulot sa iyo na magsulat ng iyong sariling mga mensahe dito kung ($my_Insert_Statement-> execute()) ( echo "Matagumpay na nalikha ang bagong record"; ) else ( echo "Hindi makalikha ng record"; ) // Sa puntong ito maaari mong baguhin ang data ng mga variable at isagawa muli upang magdagdag ng higit pang data sa database $first_Name = "John"; $last_Name = "Smith"; $email = " [email protected]"; $my_Insert_Statement->execute(); // Ipatupad muli ngayong nagbago na ang mga variable kung ($my_Insert_Statement->execute()) ( echo "Matagumpay na nalikha ang bagong record"; ) else ( echo "Hindi makalikha ng record"; )

Sa mga linya 28, 29 at 30 ginagamit namin ang pamamaraan bindParam() object ng database. Mayroon ding pamamaraan bindValue(), iba sa nauna.

  • bindParam() – ang pamamaraang ito ay binibilang ang data kapag ang pamamaraan execute() nakamit. Sa unang pagkakataon na naabot ng script ang pamamaraan execute() nakikita niya iyon $first_Name references "Thom", binds na halaga at executes ang query. Kapag naabot ng script ang pamamaraan sa pangalawang pagkakataon execute(), kamukha niya yun $first_Name ngayon ay tumutukoy sa "John", nagbubuklod sa halagang iyon at pinapatakbo muli ang query gamit ang bagong halaga. Mahalagang maunawaan na ginagawa namin ang kahilingan nang isang beses at pagkatapos ay pinapalitan ang iba't ibang data sa iba't ibang lugar sa script.
  • bindValue() – kinakalkula ng pamamaraang ito ang data sa sandaling makuha nito ang turn. Dahil ang halaga $first_Name ay nakatakda sa "Thom" sa oras na naabot namin ang pamamaraan bindValue(), ito ay gagamitin kapag tumatawag sa pamamaraan execute() Para sa $my_Insert_Statement.

Pakitandaan na muli naming ginagamit ang variable $first_Name at bigyan ito ng bagong halaga sa pangalawang pagkakataon. Kung susuriin mo ang iyong database pagkatapos patakbuhin ang script na ito, ang parehong mga ibinigay na pangalan ay naroroon, salungat sa variable na halaga na ito $first_Name ay magiging katumbas ng "John" sa dulo ng script na ito. Tandaan na sinusuri ng PHP ang mga nilalaman ng isang script bago ito tumakbo.

Kung babaguhin mo ang iyong script sa pamamagitan ng pagpapalit bindParam sa bindValue, idaragdag mo ang "Thom Vial" sa database ng MySQL nang dalawang beses at hindi papansinin si John Smith.

Hakbang 3 - I-verify ang tagumpay at lutasin ang mga pangkalahatang isyu

Kung matagumpay ang query na aming pinatakbo sa database ng MySQL, makikita namin ang sumusunod na mensahe:

Paglutas ng mga karaniwang error

MySQLi

Sa anumang iba pang kaso, isang mensahe ng error ang ipapakita sa halip na ang mensahe sa itaas. Halimbawa, gumawa tayo ng isang error sa syntax sa ating code at makukuha natin ito:

Tulad ng nakikita natin, ang unang bahagi ng code ay maayos, ang koneksyon ay matagumpay na naitatag, ngunit ang aming SQL query ay nakatagpo ng pagkabigo kapag naisakatuparan.

"Error: INSERT INTO Students (pangalan, apelyido, email) VALUES ("Thom", "Vial", " [email protected]") Mayroon kang error sa iyong SQL syntax; tingnan ang manual na tumutugma sa bersyon ng iyong MySQL server para sa tamang syntax na gagamitin malapit sa "(pangalan, apelyido, email) VALUES ("Thom", "Vial", " [email protected]")" sa linya 1"

Nagkaroon ng syntax error na nagiging sanhi ng pagkabigo ng aming script. Ang error ay narito:

$sql = "INSERT INTO Students (pangalan, apelyido, email) VALUES ("Thom", "Vial", " [email protected]")";

Tulad ng nakikita mo, gumagamit kami ng mga kulot na braces sa halip na mga panaklong. Ito ay hindi tama at nagreresulta sa isang syntax error sa aming script.

PDO

Sa linya 7 ng koneksyon ng PDO, ang mode ng paghawak ng error ay nakatakda sa 'ipakita ang lahat ng mga pagbubukod'. Kung aalisin mo ito sa script at nabigo ang kahilingan, hindi ka makakatanggap ng anumang mensahe ng error. Kapag naka-enable ang mga exception, ipapakita ang mga partikular na problemang nararanasan. Ito ay karaniwang pinakamahusay na ginagamit kapag bumubuo ng isang script, dahil maaari itong magbunyag ng database at mga pangalan ng talahanayan na gusto mong itago mula sa sinumang maaaring makakuha ng hindi awtorisadong pag-access sa iyong data. Sa kaso sa itaas, kapag ginamit ang mga kulot na brace sa halip na mga panaklong, ang error ay mukhang nasa ibaba:

Malalang error: Hindi nahuli na exception "PDOException" na may mensaheng "SQLSTATE: Syntax error o paglabag sa access: 1064 Mayroon kang error sa iyong SQL syntax; tingnan ang manual na tumutugma sa bersyon ng iyong MySQL server para sa tamang syntax na gagamitin malapit sa "(pangalan, apelyido, email) VALUES ("Thom", "Vial", " [email protected]")" sa linya 1"

Iba pang mga problema na maaari mong makaharap:

  • Ang mga patlang ay tinukoy nang hindi wasto (mga hindi umiiral na mga patlang o maling spelling ng mga pangalan).
  • Ang uri ng halaga ay hindi tumutugma sa uri ng field. Halimbawa, kapag gusto naming italaga ang halaga ng isang numero 47 patlang Pangalan, makakakuha tayo ng error dahil ang value ay inaasahang maging isang string. Ngunit, kung tumukoy ka ng numero sa mga panipi, halimbawa, “47” , walang magiging error dahil ang aming numero ay isusulat bilang isang string sa field na ito.
  • Isang pagtatangka na magpasok ng data sa isang talahanayan na hindi umiiral o isang error sa pagbaybay ng pangalan ng talahanayan.

Ang lahat ng mga error na ito ay maaaring maayos sa pamamagitan ng pagsunod sa mga gabay sa pagwawasto ng error o sa pamamagitan ng pagsuri sa log ng error.

Pagkatapos ng matagumpay na pagdaragdag ng data, dapat nating makita ito sa ating database. Narito ang isang halimbawa ng talahanayan kung saan idinagdag namin ang aming data, tinitingnan phpMyAdmin.

Konklusyon

Sa tutorial na ito natutunan mo kung paano gamitin PHP code upang magdagdag ng record sa isang MySQL table gamit MySQLi At PDO. Tiningnan din namin ang mga karaniwang error at ang kanilang mga solusyon. Ang pag-alam kung paano gumamit ng PHP code upang idagdag sa isang MySQL database ay magiging kapaki-pakinabang kung ikaw ay natututong mag-program o gumagawa na ng iyong sariling website.

Sa tutorial na ito, titingnan natin kung paano magpasok ng data sa isang database nang direkta mula sa iyong mga PHP script.

Pagpasok ng data gamit ang SQL

Gumagamit ka ng SQL upang magpasok ng data sa isang database sa parehong paraan na ginagamit mo ang SQL upang lumikha ng mga database at talahanayan. Ang SQL query syntax ay:

INSERT SA TableName (column1, column 2, ...) VALUES(value1, halaga 2, ...)

Gaya ng nakikita mo, maaari mong i-update ang maraming column sa isang SQL statement sa pamamagitan ng pagtukoy sa mga ito sa isang listahan na pinaghihiwalay ng kuwit. Ngunit siyempre, maaari mo ring tukuyin ang isang column at isang value lang. Ang mga column na hindi nabanggit sa SQL statement na ito ay mananatiling walang laman.

Halimbawa: Pagpasok ng bagong tao sa isang table

Sa halimbawang ito ginagamit namin ang database mula sa Aralin 18. Sabihin nating gusto nating magpasok ng isang tao sa database. Maaaring ito ay Gus Goose na may numero ng telepono 99887766 at petsa ng kapanganakan 1964-04-20 .

Maaaring ganito ang hitsura ng SQL statement:

$strSQL = "INSERT INTO people(FirstName,LastName,Phone,BirthDate) VALUES("Gus","Goose","99887766 ","1964-04-20"");

Tulad ng nakikita mo, ang mga pahayag ng SQL ay maaaring medyo mahaba, at maaari itong madaling mawala. Samakatuwid, mas mahusay na isulat ang SQL na pahayag nang bahagyang naiiba:

strSQL = "INSERT INTO people("; strSQL = strSQL . "FirstName,"; strSQL = strSQL . "Apelyido," strSQL = strSQL . "Telepono," strSQL = strSQL . "kapanganakan)"; strSQL = strSQL . "VALUES ("; strSQL = strSQL . ""Gus", "; strSQL = strSQL . ""Goose", "; strSQL = strSQL . ""99887766", ";

strSQL = strSQL . ""1964-04-20""); mysql_query($strSQL) o mamatay(mysql_error());.

Sa pagsasagawa, walang pagkakaiba sa paggamit ng isa o iba pang pamamaraan, ngunit kapag nagtatrabaho sa malalaking talahanayan ang kakayahang "masubaybayan" ay nagiging lubhang mahalaga, kaya piliin ang pinaka-angkop na paraan.

Subukan natin ang sumusunod na code para ipasok ang Gus Goose sa database:

Pagpasok ng data sa database // Koneksyon sa database server mysql_connect("mysql.myhost.com", "user", "sesame") o mamatay (mysql_error());// Pumili ng database mysql_select_db("mydatabase") o mamatay(mysql_error()); //Pagbuo ng SQL statement $strSQL = "INSERT INTO people("; $strSQL = $strSQL . "FirstName,"; $strSQL = $strSQL . "Apelyido,"; $strSQL = $strSQL . "Telepono,"; $strSQL = $strSQL . "Petsa ng Kapanganakan"; $strSQL = $strSQL . "VALUES("; $strSQL = $strSQL . ""Gus", "; $strSQL = $strSQL . ""Goose", "; $strSQL = $strSQL . ""99887766", "; $strSQL = $strSQL . ""1964-04-20""); // Ang SQL statement ay naisakatuparan mysql_query($strSQL) o mamatay (mysql_error()); //Isara ang koneksyon mysql_close();

?>



Na-update ang DB!

Sine-save ang input ng user sa database

Sabihin nating mayroon kang isang simpleng form: I-save Ang form na ito ay isinumite sa file

insert.php

, kung saan ikaw, tulad ng ipinapakita sa Aralin 11, ay makakatanggap ng input ng user sa pamamagitan ng paghiling ng mga nilalaman ng form. Sa partikular na kaso na ito, ang pahayag ng SQL ay maaaring ganito:

strSQL = "INSERT INTO people(FirstName) values("" . $_POST["FirstName"] . "")"

Katulad nito, maaari kang humiling ng data mula sa cookies, query string session, atbp.

Ang pinakakaraniwang mga pagkakamali ng nagsisimula

Sa una, malamang na makakakuha ka ng isang grupo ng mga mensahe ng error kapag sinubukan mong i-update ang database. Kapag nagtatrabaho sa isang database, walang mga error ang pinapayagan sa lahat. Ang isang maling kuwit ay maaaring mangahulugan na ang database ay hindi na-update at makakatanggap ka ng isang mensahe ng error. Sa ibaba ay inilalarawan namin ang mga pinakakaraniwang pagkakamali.

Di-wastong uri ng data

Mahalagang tumugma ang data at uri ng data ng column sa isa't isa. Ang bawat column ay maaaring maglaman ng data ng isang partikular na uri.

Ipinapakita ng sumusunod na screenshot ang mga uri ng data ng talahanayan ng "mga tao" mula sa aming halimbawa. Ang isang error ay itinapon kung, halimbawa, sinubukan mong magpasok ng teksto o isang numero sa isang field ng data. Samakatuwid, itakda ang uri ng data nang tumpak hangga't maaari. Ang pinakakaraniwang uri ng data ay nakalista sa ibaba:
Ibig sabihin
Uri ng Data Hanggang 255 character - o ang haba na tinukoy sa "Haba"
TEKSTO
Malaking bloke ng teksto o kumbinasyon ng teksto at mga numero. Hanggang 65,535 character
INT
Numerical data para sa mathematical calculations. 4 byte
DATE
Mga petsa sa YYY-MM-DD na format 3 byte
ORAS
Oras sa hh:mm:ss na format 3 byte
DATETIME
Petsa at oras sa YYY-MM-DD na hh:mm:ss na format 8 byte

Mga SQL statement na may mga quote o backslashes

Kung susubukan mong magpasok ng text na naglalaman ng solong quote ("), double quote ("), o backslash (\) na mga character, hindi ilalagay ang record sa database. Ang solusyon ay ang palitan ang mga backslashes sa harap ng mga character na dapat i-mnemonize kapag ipinasok sa mga query sa database.

Sa artikulong ito, titingnan natin kung paano gamitin ang PHP upang magpasok ng mga hilera sa isang database ng MySQL.

Hakbang 1 - Paglikha ng Table

Una kailangan mong lumikha ng isang talahanayan para sa data. Ito ay isang simpleng pamamaraan na maaaring gawin gamit ang phpMyAdmin sa iyong hosting control panel.

Pagkatapos mag-log in sa phpMyAdmin makikita mo ang interface na ito:
Gumawa tayo ng table na pinangalanang Students sa u266072517_name database sa pamamagitan ng pag-click sa button na "Gumawa ng Table". Pagkatapos nito, makakakita kami ng isang bagong pahina kung saan itinakda namin ang lahat ng kinakailangang mga parameter ng talahanayan:

Ito ang pinakasimpleng setting na maaaring magamit sa isang talahanayan at makakuha ng higit pang impormasyon tungkol sa istraktura ng talahanayan/database.

Mga opsyon sa column:

  • Ang pangalan ay ang pangalan ng column na lumalabas sa itaas ng talahanayan.
  • Uri — uri ng hanay. Halimbawa, pinili namin ang varchar dahil maglalagay kami ng mga halaga ng string.
  • Haba/Mga Halaga - Ginagamit upang tukuyin ang maximum na haba na maaaring magkaroon ng entry sa column na ito.
  • Index - Ginamit namin ang "Pangunahing" index para sa field na "ID". Kapag gumagawa ng talahanayan, inirerekomendang gumamit lamang ng isang column bilang pangunahing key. Ito ay ginagamit upang ilista ang mga tala sa talahanayan at kinakailangan kapag nagse-set up ng talahanayan. Nabanggit ko rin ang "A_I", na nangangahulugang "Auto Increment" - ang parameter para sa awtomatikong pagtatalaga ng mga numero ng record (1,2,3,4...).
    I-click ang button na "I-save" at malilikha ang talahanayan.

Hakbang 2: Sumulat ng PHP code upang magpasok ng data sa MySQL.

Pagpipilian 1 - Paraan ng MySQLi

Una kailangan mong magtatag ng isang koneksyon sa database. Pagkatapos nito ginagamit namin ang query ng SQL INSERT. Buong halimbawa ng code:

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

Ang unang bahagi ng code (linya 3 - 18) ay inilaan upang kumonekta sa database.

Magsimula tayo sa linyang numero 19:

$sql = "INSERT INTO Students (pangalan, apelyido, email) VALUES ("Thom", "Vial", " [email protected]")";

Naglalagay ito ng data sa isang database ng MySQL. Ang INSERT INTO ay isang pahayag na nagdaragdag ng data sa isang tinukoy na talahanayan. Sa aming halimbawa, ang data ay idinagdag sa talahanayan ng Mga Mag-aaral.

Susunod ay isang listahan ng mga hanay kung saan ipinasok ang mga halaga: pangalan, apelyido, email. Ang data ay idaragdag sa pagkakasunud-sunod na tinukoy. Kung nagsulat kami (email, apelyido, pangalan), ang mga halaga ay idinagdag sa ibang pagkakasunud-sunod.

Ang susunod na bahagi ay ang pahayag ng VALUES. Dito namin tinukoy ang mga halaga para sa mga column: name = Thom, lastname = Vial, email = [email protected].

Pinatakbo namin ang kahilingan gamit ang PHP code. Sa program code, ang mga query sa SQL ay dapat na i-escape gamit ang mga quote. Sinusuri ng susunod na piraso ng code (linya 20-22) kung matagumpay ang aming kahilingan:

if (mysqli_query($conn, $sql)) (echo "Matagumpay na nalikha ang bagong record"; )

Ang code na ito ay nagpapakita ng isang mensahe na nagsasaad na ang kahilingan ay matagumpay.

At ang huling bahagi (linya 22 - 24) ay nagpapakita ng isang abiso kung ang kahilingan ay hindi matagumpay:

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

Opsyon 2 - Paraan ng PHP Data Object (PDO).

Una kailangan naming kumonekta sa database sa pamamagitan ng paglikha ng isang bagong bagay na PDO. Kapag nagtatrabaho dito, gagamit kami ng iba't ibang pamamaraan ng PDO. Ang mga pamamaraan ng object ay tinatawag na mga sumusunod:

$the_Object->the_Method();

Pinapayagan ka ng PDO na "maghanda" ng SQL code bago ito maisakatuparan. Ang SQL query ay sinusuri at "itinatama" bago tumakbo. Halimbawa, ang isang simpleng pag-atake ng SQL injection ay maaaring gawin sa pamamagitan lamang ng pagpasok ng SQL code sa isang field ng form. Halimbawa:

Dahil ito ay syntactically correct SQL, ang semicolon ay gumagawa ng DROP DATABASE user_table na isang bagong SQL query at ang user table ay na-drop. Ang mga inihandang expression (nakatali na mga variable) ay hindi nagpapahintulot sa mga semicolon at quote na wakasan ang orihinal na query, samakatuwid, ang DROP DATABASE na utos ay hindi kailanman isasagawa.

Upang gumamit ng mga inihandang expression, kailangan mong magsulat ng bagong variable na tumatawag sa paraan ng prepare() ng object ng database.

Tamang code:

getMessage(); ) // Magtakda ng mga variable para sa taong gusto nating idagdag sa database $first_Name = "Thom"; $last_Name = "Vial"; $email = " [email protected]"; // Lumikha ng isang variable na tumatawag sa paraan ng paghahanda () ng object ng database // Ang SQL query na gusto mong patakbuhin ay ipinasok bilang isang parameter, at ang mga placeholder ay nakasulat tulad nito: placeholder_name $my_Insert_Statement = $my_Db_Connection->prepare(" INSERT INTO Students ( name, lastname, email) VALUES (:first_name, :last_name, :email)"); // Sinasabi na namin ngayon sa script kung aling variable ang tumutukoy sa bawat placeholder para gamitin ang bindParam() method // Ang unang parameter ay ang placeholder sa pahayag sa itaas , ang pangalawa ay ang variable na dapat itong sumangguni sa $my_Insert_Statement->bindParam(:first_name, $first_Name->bindParam(:last_name, $last_Name); tinukoy lang // Ang execute() method ay nagbabalik ng TRUE kung ito ay magtagumpay at FALSE kung ito ay nabigo, na nagbibigay sa iyo ng opsyon na mag-print ng sarili mong if message ($my_Insert_Statement->execute()) ( echo "New recordcreatedsuccessfully"; ) else ( echo "Unable to createrecord"; ) // Sa puntong ito maaari mong baguhin ang variable na data at magpatakbo ng isang query upang magdagdag ng higit pang data sa data ng database sa database $first_Name = "John"; $last_Name = "Smith"; $email = " [email protected]"; $my_Insert_Statement->execute(); // I-execute muli kapag binago ang variable kung ($my_Insert_Statement->execute()) ( echo "New recordcreatedsuccessfully"; ) else ( echo "Unable to createrecord";

Sa mga linya 28, 29, at 30, ginagamit namin ang bindParam() na paraan ng object ng database. Mayroon ding bindValue() na pamamaraan, na ibang-iba sa nauna.

  • bindParam() - Sinusuri ng pamamaraang ito ang data kapag naabot ang execute() na pamamaraan. Sa unang pagkakataon na maabot ng script ang execute() na pamamaraan, makikita nito na ang $first_Name ay tumutugma sa "Thom". Pagkatapos ay ibubuklod ang halagang ito at patakbuhin ang kahilingan. Kapag naabot ng script ang pangalawang execute() na pamamaraan, makikita nito na ang $first_Name ay tumutugma na ngayon kay "John". Pagkatapos ay ibibigkis nito ang halagang ito at patakbuhin muli ang query gamit ang mga bagong halaga. Mahalagang tandaan na natukoy namin ang isang query nang isang beses at muling ginagamit ito sa iba't ibang data sa iba't ibang mga punto sa script.
  • bindValue() - Sinusuri ng paraang ito ang data kapag naabot na ang bindValue(). Dahil ang $first_Name ay nakatakda sa "Thom", kapag bindValue() ay naabot, ito ay gagamitin sa tuwing ang execute() na paraan ay tinatawag sa $my_Insert_Statement.
    Pansinin na muli naming ginagamit ang variable na $first_Name at itinatalaga ito ng bagong value sa pangalawang pagkakataon. Pagkatapos patakbuhin ang script, ang parehong mga pangalan ay ililista sa database, sa kabila ng katotohanan na ang variable na $first_Name sa dulo ng script ay may value na "John". Tandaan na sinusuri ng PHP ang buong script bago ito tumakbo.

Kung i-update mo ang script upang palitan ang bindParam ng bindValue, ilalagay mo ang "Thom Vial" sa database nang dalawang beses at hindi papansinin si John Smith.

Hakbang 3 - Kumpirmahin ang Tagumpay at Lutasin ang Mga Problema

Kung matagumpay ang kahilingang magpasok ng mga hilera sa database, makikita natin ang sumusunod na mensahe:

Pag-troubleshoot ng Mga Karaniwang Error

MySQLi

Sa anumang iba pang kaso, may ipapakitang mensahe ng error. Halimbawa, gumawa tayo ng isang error sa syntax sa code at makukuha natin ang sumusunod:

Ang unang bahagi ng code ay ok, ang koneksyon ay matagumpay na naitatag, ngunit ang SQL query ay nabigo.

"Error: INSERT INTO Students (pangalan, apelyido, email) VALUES ("Thom", "Vial", " [email protected]") Mayroon kang error sa iyong SQL syntax; tingnan ang manwal na tumutugma sa bersyon ng iyong MySQL server para sa mga karapatang syntax na gagamitin malapit sa "(pangalan, apelyido, email) VALUES ("Thom", "Vial", " [email protected]")" sa linya 1"

Nagkaroon ng syntax error na naging sanhi ng pag-crash ng script. Ang error ay narito:

$sql = "INSERT INTO Students (pangalan, apelyido, email) VALUES ("Thom", "Vial", " [email protected]")";

Gumamit kami ng mga kulot na braces sa halip na mga regular. Ito ay hindi tama at ang script ay nakabuo ng isang syntax error.

PDO

Ang linya 7 ng koneksyon ng PDO ay nagtatakda ng error mode sa "ipakita ang lahat ng mga pagbubukod." Kung nakatakda sa ibang halaga at nabigo ang kahilingan, hindi kami makakatanggap ng anumang mga mensahe ng error.

Dapat lang gamitin ang setting na ito kapag bumubuo ng script. Kapag na-activate, maaaring ipakita ang mga pangalan ng database at talahanayan na pinakamahusay na nakatago para sa mga kadahilanang pangseguridad. Sa kasong inilarawan sa itaas, kapag ginamit ang mga kulot na brace sa halip na mga regular na brace, ganito ang hitsura ng mensahe ng error:

Malalang error: Uncaughtexception "PDOException" na may mensaheng "SQLSTATE: Syntax error o accessviolation: 1064 Mayroon kang error sa iyong SQL syntax; suriin ang manual na tumutugma sa bersyon ng iyong MySQL server para sa rightsyntax na gagamitin malapit sa "(pangalan, apelyido, email) VALUES ("Thom", "Vial", " [email protected]")" sa linya 1"

Iba pang posibleng problema:

  • Maling tinukoy ang mga column (mga hindi umiiral na column o maling spelling ng mga pangalan ng column).
  • Ang isang uri ng halaga ay itinalaga sa isang column ng isa pang uri. Halimbawa, kung susubukan mong ipasok ang numero 47 sa column na Pangalan, magkakaroon ka ng error. Ang column na ito ay dapat gumamit ng string value. Ngunit kung tinukoy namin ang isang numero sa mga panipi (halimbawa, "47") gagana ito, dahil ito ay isang string.
  • Ang isang pagtatangka ay ginawa upang ipasok ang data sa isang talahanayan na hindi umiiral. Nagkaroon din ng pagkakamali sa spelling sa pangalan ng talahanayan.

Pagkatapos ng matagumpay na pagpasok ng data, makikita natin na ito ay naidagdag sa database. Nasa ibaba ang isang halimbawa ng isang talahanayan na may idinagdag na data.

Konklusyon

Sa artikulong ito, ibinahagi namin kung paano gamitin ang PHP upang magpasok ng data sa isang database ng MySQL gamit ang MySQLi at PDO. At kung paano maalis ang mga karaniwang pagkakamali. Ang kaalamang ito ay magiging kapaki-pakinabang kapag nag-aaral ng programming at kapag bumubuo ng iyong sariling website.

Ang publikasyong ito ay pagsasalin ng artikulong “ Paano Gamitin ang PHP para Magpasok ng Data sa MySQL Database", na inihanda ng magiliw na pangkat ng proyekto


Ang aralin ay ibabatay sa form ng feedback, kinakailangan sa halos anumang website.

Unang hakbang: Paglikha ng isang database sa MySQL

Pagbubukas phpMyAdmin(kasama sa pangunahing pakete Denwer`a), at lumikha ng isang database na tinatawag na " test_base", piliin ang encoding " cp1251_general_ci".

Ikalawang hakbang: Paglikha ng talahanayan sa MySQL sa pamamagitan ng paggamit SQL query

Maaari kang, siyempre, lumikha ng isang talahanayan gamit ang mga karaniwang tool phpMyAdmin, ngunit sa paraang ito ay malinaw na makikita ang istraktura ng talahanayang ginagawa.

Gumawa ng table na tinatawag na " test_table" at may anim na field na pinangalanang:
"pangalan" - ang mga pangalan ng gumagamit ay maiimbak dito;
"email" - ang mga email address ng user ay maiimbak dito;
"tema" - ang paksa ng mensahe ay maiimbak dito;
"mensahe" - ang mga mensahe ay maiimbak dito;
"data" - ang petsa na ipinadala ang mensahe ay maiimbak dito;
"id" - numero ng pagkakakilanlan ng record (linya), key field.

SQL query:
lumikha ng talahanayan test_table(
id int(11) hindi null auto_increment,
pangalan varchar(255) hindi null,
email varchar(255) hindi null,
ang tema varchar(255) hindi null,
hindi null ang text ng mensahe,
hindi null ang petsa ng data,
pangunahing susi (id)
);

Ikatlong hakbang: Paggawa ng Form

index.html:

Na-save ang form sa MySQL

Halimbawa ng isang form na may data saving sa MySQL

























Nagpapadala ng kahilingan
Pangalan:
Email:
Paksa ng Mensahe:
Mensahe:


























Ikaapat na hakbang: Paglikha ng isang tagapangasiwa ng form " save_form.php" sa pag-save ng natanggap na data sa MySQL

save_form.php:





/* MySQL table kung saan iimbak ang data */
$table = "test_table";

/* Lumikha ng koneksyon */

/* Tukuyin ang kasalukuyang petsa */
$cdate = date("Y-m-d");

/* Lumilikha kami ng isang query upang magpasok ng impormasyon sa talahanayan
pangalan...petsa - ang pangalan ng mga partikular na field sa database;
sa $_POST["test_name"]... $_POST["test_mess"] - ang mga variable na ito ay naglalaman ng data na natanggap mula sa form */
$query = "INSERT IN TO $table SET name="".$_POST["test_name"].", email="".$_POST["test_mail"].",
theme="".$_POST["test_theme"].", message="".$_POST["test_mess"].", data="$cdate"";

/* Isara ang koneksyon */
mysql_close();

/* Kung matagumpay ang pag-save, magpakita ng mensahe at isang link sa pagbabalik */
echo("


Matagumpay na na-save ang data!



Bumalik ka
");

Ikalimang hakbang: Ipinapakita ang naka-save na data" view_data.php"

view_data.php:

/* Kumonekta sa database */
$hostname = "localhost"; // pangalan/path ng server, kasama ang MySQL
$username = "ugat"; // username (sa Denwer ang default ay "root")
$password = ""; // password ng user (sa Denwer walang password bilang default, maaaring iwanang walang laman ang parameter na ito)
$dbName = "test_base"; // pangalan ng database


$table = "test_table";

/* Lumikha ng koneksyon */
mysql_connect($hostname, $username, $password) o die("Hindi makalikha ng koneksyon");

/* Pumili ng database. Kung may naganap na error, ipakita ito */
mysql_select_db($dbName) o mamatay (mysql_error());

/* Lumilikha kami ng isang query upang kunin ang data mula sa mga patlang na "pangalan", "email", "tema",
"mensahe", "data" na mga talahanayan "test_table" */
$query = "PUMILI ng id, pangalan, email, tema, mensahe, data MULA sa $table";

/* Isagawa ang kahilingan. Kung may naganap na error, ipakita ito. */


echo("

Pag-output ng data mula sa MySQL

Pag-output ng dating na-save na data mula sa isang MySQL table










");



echo"

\n";
echo" \n";
echo" \n";
echo" \n";
echo" \n";
echo" \n";
echo" \n\n";
}

Echo("

# Petsa ng pag-access Mga username Email ng mga user Paksa ng Mensahe Mga mensahe ng user
".$row["id"]."".$row["data"]."".$row["pangalan"]."".$row["email"]."".$row["tema"]."".$row["mensahe"]."
\n");

/* Isara ang koneksyon */
mysql_close();

Ika-anim na hakbang: Pag-alis ng mga tala mula sa database" del_data.php"

del_data.php:

/* Kumonekta sa database */
$hostname = "localhost"; // pangalan/path ng server, kasama ang MySQL
$username = "ugat"; // username (sa Denwer ang default ay "root")
$password = ""; // password ng user (sa Denwer walang password bilang default, maaaring iwanang walang laman ang parameter na ito)
$dbName = "test_base"; // pangalan ng database

/* MySQL table kung saan nakaimbak ang data */
$table = "test_table";

/* Lumikha ng koneksyon */
mysql_connect($hostname, $username, $password) o die("Hindi makalikha ng koneksyon");

/* Pumili ng database. Kung may naganap na error, ipakita ito */
mysql_select_db($dbName) o mamatay (mysql_error());

/* Kung na-click ang link na tanggalin, tanggalin ang entry */
$del = $query = "tanggalin mula sa $table kung saan (id="$del"");
/* Isagawa ang kahilingan. Kung may naganap na error, ipakita ito. */
mysql_query($query) o mamatay(mysql_error());



/* Isagawa ang kahilingan. Kung may naganap na error, ipakita ito. */
$res = mysql_query($query) o mamatay(mysql_error());

$row = mysql_num_rows($res);

/* Output data mula sa talahanayan */
echo("

Pag-output at pagtanggal ng data mula sa MySQL

Pag-output at pagtanggal ng dating na-save na data mula sa isang MySQL table











");

/* Cycle ng outputting data mula sa database ng mga partikular na field */
habang ($row = mysql_fetch_array($res)) (
echo"

\n";
echo" \n";
echo" \n";
echo" \n";
echo" \n";
echo" \n";
echo" \n";
/* Bumuo ng link para magtanggal ng field */
echo" \n";
echo"\n";
}

Echo("

# Petsa ng pag-access Mga username Email ng mga user Paksa ng Mensahe Mga mensahe ng user Pagtanggal
".$row["id"]."".$row["data"]."".$row["pangalan"]."".$row["email"]."".$row["tema"]."".$row["mensahe"]."Tanggalin
\n");

/* Isara ang koneksyon */
mysql_close();

Ikapitong hakbang: Pag-edit at pag-update ng mga tala sa database " update_data.php"

update_data.php:

/* Kumonekta sa database */
$hostname = "localhost"; // pangalan/path ng server, kasama ang MySQL
$username = "ugat"; // username (sa Denwer ang default ay "root")
$password = ""; // password ng user (sa Denwer walang password bilang default, maaaring iwanang walang laman ang parameter na ito)
$dbName = "test_base"; // pangalan ng database

/* MySQL table kung saan nakaimbak ang data */
$table = "test_table";

/* Lumikha ng koneksyon */
mysql_connect($hostname, $username, $password) o die("Hindi makalikha ng koneksyon");

/* Pumili ng database. Kung may naganap na error, ipakita ito */
mysql_select_db($dbName) o mamatay (mysql_error());

/* Kung pinindot ang edit button, gumawa ng mga pagbabago */
kung(@$submit_edit) (
$query = "I-UPDATE ang $table SET name="$test_name", email="$test_mail", theme="$test_theme", message="$test_mess" WHERE id="$update"";
/* Isagawa ang kahilingan. Kung may naganap na error, ipakita ito. */
mysql_query($query) o mamatay (mysql_error());
}

/* Inilalagay namin ang buong database sa $res variable */
$query = "PUMILI * MULA SA $table";
/* Isagawa ang kahilingan. Kung may naganap na error, ipakita ito. */
$res = mysql_query($query) o mamatay(mysql_error());
/* Alamin ang bilang ng mga tala sa database */
$row = mysql_num_rows($res);

/* Output data mula sa talahanayan */
echo("

Pag-edit at pag-update ng data

Pag-edit at pag-update ng data sa isang talahanayan ng MySQL


");

/* Cycle ng outputting data mula sa database ng mga partikular na field */
habang ($row = mysql_fetch_array($res)) (
echo"

\n";
echo" \n";
echo" \n";
echo" \n";
echo" \n";
echo"\n";
echo" \n";
echo"\n";
echo" \n";
echo"\n";
echo" \n";
echo"\n";
echo" \n";
echo"\n";
echo" \n";
echo"
#".$row["id"]."
".$row["data"]."
Username:
Email ng user:
Paksa ng Mensahe:
Mensahe:
\n\n";
}

/* Isara ang koneksyon */
mysql_close();

Yun lang, happy coding:1133:

_________________________________

Sa artikulong ito ay titingnan natin marahil ang ilan sa pinakamahalaga Mga query sa SQL. Ito mga query upang magdagdag at mag-alis ng mga tala mula sa isang talahanayan ng database. Dahil VERY often you have to magdagdag ng mga bagong tala sa talahanayan, at gawin ito nang awtomatiko, kung gayon ang materyal na ito ay kinakailangang pag-aralan.

Upang magsimula sa SQL query upang magdagdag ng bagong tala sa isang talahanayan:

INSERT INTO user (login, pass) values("TestUser", "123456")

Kapag nagdadagdag ng entry, ang command na " INSERT SA", pagkatapos ay ang pangalan ng talahanayan kung saan namin ipinapasok ang talaan. Susunod ay nasa panaklong ang mga pangalan ng mga patlang na gusto naming punan. At pagkatapos ay nasa panaklong pagkatapos ng salitang " mga halaga"Nagsisimula kaming ilista ang mga halaga ng mga patlang na aming napili. Pagkatapos isagawa ang query na ito, may lalabas na bagong entry sa aming talahanayan.

Minsan kailangan i-update ang entry sa talahanayan, para dito mayroong sumusunod SQL query:

I-UPDATE ang mga user SET login = "TestUser2", pass="1234560" WHERE login="TestUser"

Ang query na ito ay mas kumplikado, dahil mayroon itong pagbuo " SAAN", ngunit higit pa tungkol dito sa ibaba. Una ang utos " I-UPDATE", pagkatapos ay ang pangalan ng talahanayan, at pagkatapos ng " SET"Inilalarawan namin ang mga halaga ng lahat ng mga patlang na gusto naming baguhin. Ito ay magiging simple, ngunit ang tanong ay lumitaw: " Aling tala ang dapat i-update?". Ito ang dahilan kung bakit may " SAAN". Sa kasong ito, ina-update namin ang record, ang field " login"na mahalaga" TestUser". Pakitandaan na kung mayroong ilang ganoong mga tala, kung gayon ganap na lahat ay maa-update! Napakahalagang maunawaan ito, kung hindi, panganib na mawala ang iyong mesa.

Mag-usap pa tayo ng kaunti tungkol sa" SAAN". Bilang karagdagan sa mga simpleng pagsusuri sa pagkakapantay-pantay, mayroon ding mga hindi pagkakapantay-pantay, pati na rin ang mga lohikal na operasyon: AT At O.

I-UPDATE ang mga user SET login = "TestUser2", pass="1234560" WHERE id< 15 AND login="TestUser"

Ibinigay SQL query ia-update ang mga rekord na iyon, id na kung saan ay may mas kaunti 15 AT patlang" login"mga bagay" TestUser"Sana naisip mo ang disenyo" SAAN"dahil ito ay napakahalaga. Eksakto" SAAN"ginamit kapag pagkuha ng mga tala mula sa mga talahanayan, at ito ang pinakamadalas na ginagamit na gawain kapag nagtatrabaho sa mga database.

At sa wakas, simple SQL query upang tanggalin ang mga tala mula sa isang talahanayan:

I-DELETE MULA SA mga user WHERE login="TestUser2"

Pagkatapos ng utos" I-DELETE MULA SA" ay ang pangalan ng talahanayan kung saan mo gustong tanggalin ang mga talaan. Susunod na inilalarawan namin ang "WHERE" construction. Kung ang talaan ay nakakatugon sa inilarawan na mga kundisyon, ito ay tatanggalin. Muli, bigyang-pansin, depende sa bilang ng mga talaan na nakakatugon ang kondisyon pagkatapos" SAAN", anumang bilang ng mga ito ay maaaring tanggalin.