PHP/MySQL 7: mysqli prepared statement бичих
Өмнө нь mysqli болон prepared-statement -ийн талаар бичсэн одоо шуудхан жишээ бичээд түүн дээрээ тайлбар хийгдээд явъя. Хоёр янзаар бичиж болно. Жишээнүүдийг өмнөх бичлэгүүдэд ашиглаж байсан доорхи хүснэгт дээр хийе.
-- -- Database: `dbtest` -- Table structure for table `albums` -- CREATE TABLE IF NOT EXISTS `albums` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `artist` VARCHAR(50) NOT NULL, `title` VARCHAR(50) NOT NULL, `year` INT(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; -- -- Dumping data for table `albums` -- INSERT INTO `albums` (`id`, `artist`, `title`, `year`) VALUES (1, 'Rolling Stones', 'England''s Newest Hit Makers', 1964);
1. Bound Parameters
Энэ хэлбэрийг дээрхи хүснэгтэнд бичлэгүүд оруулж байгаа жишээгээр авч үзье. Жишээнд дэлгэрэнгүй тайлбар хийлээ.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | < ?php /* MySQL server-т холбогдож байна. */ $mysqli= new mysqli('localhost', 'root', '', 'dbtest') or die("Can't connect to MySQL Server."); /* Хамгийн чухал зүйл эндээс эхлэж байна. $mysqli->prepare гэж query-гээ бэлтгэж байна. Бэлтгэж байгаа гол санаа нь шинээр оруулах утга байх газар ? тэмдэг тавьсан байна. Энэ prepares statment-ийг ажилуулах үед түүнийх нь оронд байх ёстой утга нь очиж тавигдан ажиллана. Иймд үүнийг query темплате гэж хэлж болохоор байна. Ингээд бэлтгэсэн statment-ээ серверт илгээнэ. */ if ($stmt = $mysqli->prepare("insert into albums(artist, title, year) values(?,?,?)")) { /* ? -ийн оронд бичигдэх утгуудыг авах хувьсагчдыг бэлтгэж байна. bind_param-ийн эхний параметр болох "ssi" нь түүний дараагийн 3 параметрийн өгөгдлийн төрлүүдийг тодорхойлж өгч байна. s- string, i-interger байна. Учир нь манай жишээний artist, title 2 нь тэмдэгт мөр буюу стринг харин year нь interger буюу бүхэл тоон талбар учир түүнд харгалзах утгуудыг дамжуулахаар бэлтгэж байгаа байдал нь энэ юм. */ $stmt->bind_param("ssi", $artist, $title, $year); /* Дээрхи мөрөнд бэлтгэсэн утга дамжуулах хувьсагчдадаа одоо яг оруулах утгуудаа өгч байна. Гараас утга авч байгаа бол энд формнаас ирж байгааутгуудаа $_POST[] гэх мэтээр авна. */ $artist = 'Queen'; $title='Greatest Hits'; $year=1994; /* Дээрхи мөрүүдэд statment-ээ бэлдсэн, утга авах хувьсагчдыг бэлтгэсэн, утгуудыг нь олгосон одоо харин тэд нарыг бүгдийг нийлүүлээд ажилуулж байна. Бичлэг нэмэгдсэн эсэхийг $stmt->affected_rows аар авч болох нь. */ $stmt->execute(); printf("%d Бичлэг нэмэгдлээ.<br />", $stmt->affected_rows); /* Дахин шинэ бичлэг оруулах бол дээр бэлдсэн статментээ ашиглаад зөвхөн утгуудыг өгөхөд л болж байна. Энэ нь олон бичлэг нэмэх үед сайхан боломжийг бий болгож байгаагаас гадна хурдыг нэмэгдүүлж байна */ $artist = 'Beatles'; $title="A Hard Day's Night"; $year=1964; $stmt->execute(); printf("%d Бичлэг нэмэгдлээ.<br />", $stmt->affected_rows); // Статментее ашиглаад дууссан бол хаалаа. $stmt->close(); } /* Серверт үүсгэсэн холболтоо хаалаа.*/ $mysqli->close(); ?> |
2. Bound Results
Хүснэгтийн мэдээллийг гаргаж харуулах үед хэрэглэгдэнэ. Бид өмнөх жишээнүүдэд давталт хийж $row гэж массиваар эсвэл list() функцээр гарч ирсэн үр дүнг авч хэвлэж байсан бол одоо энэ зорилгодоо prepared statement ашиглая.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | < ?php /* MySQL server-т холбогдож байна. */ $mysqli= new mysqli('localhost', 'root', '', 'dbtest') or die("Can't connect to MySQL Server."); /* Статментее бэлтгэж байна. */ if ($stmt = $mysqli->prepare('SELECT artist, title, year FROM albums ORDER BY id')) { /* Ажиллуулж байна. */ $stmt->execute(); /* $stmt->bind_result гэж SELECT -ийн ард байгаа талбаруудад харгалзах хувьсагчидыг авч байна. Эдгээрээр дамжуулан хүснэгтийн утгуудыг авах юм. */ $stmt->bind_result($artist, $title, $year); /* $stmt->fetch() -ийн тусламжтайгаар давталт хийн query-ний үр дүнд гарч ирсэн хүснэгтийн утгыг авч байна. Энэ үйлдэл бидний сайн мэдэх while($row=mysql_fetch_array()) байна гэдэгийг та бүхэн хараад мэдэж байгаа биз дээ. */ while($stmt->fetch() ){ /* Дэлгэцэнд хэвлэж байна.*/ printf("%s - %s - %d<br />", $artist, $title, $year); } $stmt->close(); } $mysqli->close(); ?> |
Дээрхи 2 хэлбэрийг хослуулан л ашиглах шаардлагатай шүү дээ. Тэгвэл доорхи жишээг одоо тайлбаргүй хараад ойлгоно бизээ.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | < ?php $mysqli= new mysqli('localhost', 'root', '', 'dbtest') or die("Can't connect to MySQL Server."); if ($stmt = $mysqli->prepare('SELECT artist, title, year FROM albums WHERE artist=? ORDER BY id')) { $stmt->bind_param("s", $artist_name); $artist_name = 'Beatles'; $stmt->execute(); $stmt->bind_result($artist, $title, $year); while($stmt->fetch() ){ printf("%s - %s - %d <br />", $artist, $title, $year); } $stmt->close(); } $mysqli->close(); ?> |
Параметруудын төрлийг доорхи хүснэгтийн дагуу тогтоож өгнө.
i All INT types
d DOUBLE and FLOAT
b BLOBs
s All other types
No related posts.
Related posts brought to you by Yet Another Related Posts Plugin.
Хэвлэх хувилбар
Найздаа илгээх


(9 votes, average: 4.78 out of 5)
Энгийн PHP функц дуудагдах үедээ параметруудаа хувилдаггүй юмуу? Өөрөөр хэлбэл тухайн функцийг дуудахдаа дуудаж байгаа хувьсагчаа тухайн функцийн стэйкд зориулаад хувилах тухай л ярьж байна. Хэрвээ хувилдаг бол bind_param хийснийхээ дараа artist_name-д утга олгож байх юм?
Nadad php ashiglan neg jooxon interface xiix xereg garaad, tegeed php deer database persistence layer xaigaad oloxgui bsiin, enugger bichchuul amarch um uu gej bodloo. Soyoloo bagshid sanal bolgox library bgaa u?
mysql-тэй жижиг ажил бол ингээд бичихэд амар биз. Харин нилээд том цаашид хөгжүүлэх ажил бол ямар нэг фрамворк ашиглсан дээр гэж бодож байна. Жишээ нь symfony, zendframework ч юм уу.
php deer database-d persistence hiih gej baigaa bol propel gej bii teriig haraarai,
Tiim bn, Propel , Doctrine – PHP Object Relational Mapper geed goyo um bdag um bn , gehdee, bi ashiglaagui ee, select, execute xiideg 2 function bicheed avsan.
function select($query, $types,$params) {
$results = array();
$mysqli= new mysqli(”, ”, ”, ”) or die(“”);
$mysqli->query(“SET NAMES ‘utf8′”);
$stmt = $mysqli-> prepare($query);
if($stmt) {
if(sizeof($params) > 0) {
array_unshift($params, $types);
call_user_func_array(array($stmt, “bind_param”), $params);
}
$stmt->execute();
$stmt->store_result();
$result = $stmt->result_metadata();
$fields = array();
foreach($result->fetch_fields() AS $field) {
$fields[] = &$row[$field->name];
}
call_user_func_array(array($stmt, “bind_result”), $fields);
while($stmt->fetch()) {
$temp = array();
foreach($row AS $key => $val) {
$temp[$key] = $val;
}
array_push($results, $temp);
}
$stmt->free_result();
$stmt->close();
}
$mysqli -> close();
return $results;
}
function execute($query, $types, $params) {
$mysqli= new mysqli(‘localhost’, ‘root’, ”, ‘db_erel’) or die(“”);
$mysqli->query(“SET NAMES ‘utf8′”);
$stmt = $mysqli-> prepare($query);
if($stmt) {
if(sizeof($params) > 0) {
array_unshift($params, $types);
call_user_func_array(array($stmt, “bind_param”), $params);
}
$stmt->execute();
$stmt->close();
}
$mysqli -> close();
}
Ingej ashiglasaniixaa daraaa l php ORM lib olson . daraa um xiivel l php ORM -r xiiye
hm, yahav ehlen surch baigaa hund bol bolj l baina. gehdee ih unprofessional bolj bna. Chi uuriinhuu DB-Class uusgeed bugdiig object handaltat hiivel zugeer dee, Jisheee n chamd DB-iin busad function -uud hereg bolohoor yahiin, ahiaad DB-Connect uusgeed yavaad baih uu esvel end tend SQL-command bicheed l yavuu gedeg bolno shd. Medeej jijig project-iin huvid bol Propel ene ter ahadna. Tiim bolohoor chi uuriin gesen sain zohion baiguulsan DB-Klass uusge. DB-Connect deeree Singleton gej argachlal baidgiig harna biz.
Chinii ene deerh bichsen bol yahav arai hooson baisnaas deer l yum. Ternees bish ch…
Za saihan boljee bur ankhnaas ni ehleed duustal 3 honog baahan jishee ene ter hiij owoo php g anzaarch ehelj bn buh jishee ene ter bolloo gehdee ene jishee l bolsongui ur dun ni hewlegdej haragdahgui iin code oo tawichihwal yun deer aldsanaa harchih ym san php dawgui ym aa odoo neg gaigui framework deer l urgeljleed ywchihwal ch php surah geed bdag aspx deer joohon ym hiij bsan hund bol ih oilgomjtoi ym bn aa zarim neg setgegdeluudiig unshihaar hedii php ankh shat ch gesen heterhii hyulbar ym asuuh ym aa baaz ydaj html geh met ymnuuddaa ehleeed oilgochihood tanii hicheeliig uzwel ch uneheer oilgomjtoi ym bn bayrlalaa daraagiin hicheeliig chin huleej baiy hundetgesen: 3 honog tanii saitaas salaagui ankhlan suragch bn
Neeree ene jisheeg form ashiglaad hiisen ym aa ymar ch bsan $_post[Name]; geed awdagaaraa awchihsan uu utgaa tegeed ur ni yu ch garahgui aldaa ch garahgui tiim l ym bolchihloo ug kodoo belen tawichihwal hna aldsanaa harchih ym soyolerdene bagshaa
Дээр байгаа жишээнүүдийг Localhost дээр ажиллаж байснаар нь доорхи хаягаар татаж авна уу. http://www.soyolerdene.com/examples/mysqli/mysqli_jishee.rar
Энхээд. $_POST['name'] гэсэн юм байгаа биз дээ. жижигээр бол болохгүй шүү.
urgeljlel-g ni hezee tavih ve mysqli ORM tei ni
hi admin yaj jisheegee oruulsan yum be? Editor deer bgaa yum shig
adminaa ogdoliin baazd zyrga oruulah upload hiih delete hiih zasvarlah geed ed nariin jishee b.val olood ogooch ???gui
Puuh hicheelee ymr udaan oruuldiin. hagas jiliin umnuhteiguu l baij bhiin. php giin zunduu l mongol jishee baigaashd. php surmaar bgaa humuus endees http://www.4shared.com/file/179626345/c37198ea/php.html
mongol/angli hicheel tataj avaarai. ihenh ni mongoloor baigaa. oir zuuriin yum hiihed hangalttai hicheel baigaa. Odoo php geer ch hol yvahgui yum shig sanagdaad bgaan. zunduu shine shine hamgaalalt saitai texnologiud garaad baina. PHP songohdoo sain bodoj baigaal songooroi. Minii bodloor demii yum shigee. Tehdee surah neg surval zugeershu!
prepared statement iig persistent connection toi ashiglahgui bol hereggui ed gej bodoj bna. php iin framework uudiig n surcan n deer bizde. zend , symfony geed.
ch: Удаан оруулахуу хурдан оруулах уу гэдэг бол миний л асуудал. Би чиний болон бусад хүмүүсийн өмнө хурдан оруулах үүрэг хүлээгээгүй юм ш тээ. PHP-ээр хол явахгүй шалтгаанаа тайлбарлана уу. Би чиний тавьсан хичээлийг татаж байгаа 2 дахь л хүн боллоо
sh: яадаг ч байсан prepared statement нц давуу талтай л даа. Мэдээж фрамеворк ашигласан дээр. Би веб апп хийх ажлуудадаа симфони ашиглах санаатай байна.
юутай санал сэтгэгдэлээ үлдээсэнд тнкс
ch gej nertei hunii http://www.4shared.com/file/179626345/c37198ea/php.html hayagaar tavisan medeelel mash huuchirsan (2005 ony yeiinh bololtoi) medeelel baigaag anhaarna uu.
Minii tavisan file joohn huuchin baij magadgui ee. Anhlan surch baigaa humuust nemer boloh bol uu gj tavisiin. php giin sintaks ni odoohondoo uurchlugdchuugui baigaa tul huuchin geed baih heregguil bolvuu harin ch uuruu bie daan surch baigaa hund Mongol hel deer baival iluu deer baij magad. Zuvhun ene blogt bichsen comment deeree php file aa shareleed URL iig ni tavisan bolhoor gants hoyor tatsan tataagui ni nadad hamaagui ee hehe. iishee orj irsen humuus uursduu medne bizde tatah tatahguigee. Ta nart tus boloh gj sharelsan yum. Ene admin ni uul ni bagsh l suragtai baisiin bi buruu sonsoogui bol. Zugeer yum bichij baihad dairaal baihiimaa. Taniig medeegee joohn hurdan oruulaachee l gsiin. Shuumjleld durgui yumaadaa. Za ter php geer hol yvahgui gesen shaltgaanaa tailbarlaach gsn baina. Ene zugeer l minii bodol. Nadad l tegej sanagdaad baina. jsp, asp ed nar ni hamaagui der. PHP giin Sul tal ni gevel: nuh tsoorhoi ihtei (jishee ni ter ajaxmaa gdg nuhur gantshan injection eer php deer hiisen ihenh site iig hackdsan). Sain tal ni gevel: hussen yumaa ymr neg yumand barigdahgui hiideg ni goy. asp deer bol control doo joohn barigdaad baidiin. Za bas neg yum nemj helehed ajil deer garahad PHP g l shaardaad baidag suragtai baisan. Za tegeed uursduu songono bizde.
CH:Chini tavisan file huuchinii huvd bol joohonoor barahgyi huuchin yum baina lee l dee. Dairsan barih gevel arai uur yum baidag baih. Bi hicheel zaadag. php eer web programchlal ehlen surch baigaa humuust hicheel orohod iluu tohiromjtoi yum shig sanagddag yum. Bichsen yuman dotor maani shuumjleh yum baival bi durtaiya huleen avna. Harin yum oruulahgyi baina gedeg deer bol neg ih shuumjluulmeergyi baigaa yum. Yagaad gevel ene minii huvuun blog uchir.
neg yum asuuh gesiin
yamar negen site deer burtguuleed hugtsaa ni duusdii shdee
tehleer yaj ter hugtsaag tootsoj barij chadj bgan ene tal deer
tuslaach yaaj teriig shalgadiin bol ????
bi php iin talar sain medehguildee gehdee ene hicheeluud ih taalaglaa. bi bol http://www.php.net iig ashigladag bagshaa ta sudalj bgaad orchuulaad hicheelee nemj boln shuu dee…..
http://net.tutsplus.com/tutorials/php/the-problem-with-phps-prepared-statements/
prepare(‘SELECT body FROM posts’) or die(‘Problem preparing query’);
$stmt->execute();
$meta = $stmt->result_metadata();
while ( $field = $meta->fetch_field() ) {
$parameters[] = &$row[$field->name];
}
call_user_func_array(array($stmt, ‘bind_result’), $parameters);
while ( $stmt->fetch() ) {
$x = array();
foreach( $row as $key => $val ) {
$x[$key] = $val;
}
$results[] = $x;
}
return $results;
}
$results = read();
?>
untitled