Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > PHP > PHP Forum > อยากรู้ว่าแต่ละท่านจัดการ การเขียน sql กับ php ยังไง ไม่ให้ตาลายครับ



 

อยากรู้ว่าแต่ละท่านจัดการ การเขียน sql กับ php ยังไง ไม่ให้ตาลายครับ

 



Topic : 111210



โพสกระทู้ ( 50 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook



ผมเขียน sql หลายๆ บรรทัดแล้วตาลายครับ ทำให้สลับตัวแปรบ้าง
เลยอยากทราบว่า แต่ละท่านจัดบรรทัดกันยังไงครับ

ผมเขียนแบบนี้ ซึ่งตาลายมากครับ

Code (PHP)
$sql = "INSERT INTO cal_info \n";
		$sql .= "( cal_id, ans_patient, ans_patient_csi, ans_patient_sum, ans_nurse, ans_nurse_csi, ans_nurse_sum, \n";
		$sql .= "ans_pick, ans_pick_csi, ans_pick_sum, gen_m, gen_m_csi, gen_m_sum, gen_w,  \n";
		$sql .= "gen_w_csi, gen_w_sum, age_rang1, age_rang1_csi, age_rang1_sum, age_rang2, \n";
		$sql .= "age_rang2_csi, age_rang2_sum, age_rang3, age_rang3_csi, age_rang3_sum, age_rang4, age_rang4_csi,  age_rang4_sum, \n";
		$sql .= "age_rang5, age_rang5_csi, age_rang5_sum, edu_primary, edu_primary_csi, edu_primary_sum, edu_high, \n";
		$sql .= "edu_high_csi, edu_high_sum, edu_bachelor, edu_bachelor_csi, edu_bachelor_sum, cash_money, cash_money_csi, cash_money_sum, \n";	
		$sql .= "cash_tack, cash_tack_csi, cash_tack_sum, first_first, first_first_csi, first_first_sum, first_more, \n";
		$sql .= "first_more_csi, first_more_sum, like1, like2, like3, like4,\n";
		$sql .= "like5, like6, like7, like_sumary, like_no, \n";
		$sql .= "com1_yes, com1_no, com2_yes, com2_no, \n";
		$sql .= "com3_yes, com3_no, paper_sum, \n";
		$sql .= "ans_patient_5, ans_nurse_5, ans_pick_5, gen_m_5, gen_w_5, \n";
		$sql .= "age_rang1_5, age_rang2_5, age_rang3_5, age_rang4_5, age_rang5_5, \n";
		$sql .= "edu_primary_5, edu_high_5, edu_bachelor_5, cash_money_5, cash_tack_5, \n";
		$sql .= "first_first_5, first_more_5 \n";
		$sql .= " ) \n";
		$sql .= "VALUES \n ";
		$sql .= "('$cal_id', '$ans[0]', '$ans_patient_csi', '$ans_patient_sum', '$ans[1]', '$ans_nurse_csi', '$ans_nurse_sum', \n ";
		$sql .= " '$ans[2]', '$ans_pick_csi', '$ans_pick_sum', '$gen[0]', '$gen_m_csi', '$gen_m_sum', '$gen[1]', \n ";
		$sql .= " '$gen_w_csi', '$gen_w_sum', '$age[0]', '$age_rang1_csi', '$age1_sum', '$age[1]', \n ";
		$sql .= " '$age_rang2_csi', '$age2_sum', '$age[2]', '$age_rang3_csi', '$age3_sum', '$age[3]', '$age_rang4_csi', '$age4_sum', \n ";
		$sql .= " '$age[4]', '$age_rang5_csi', '$age5_sum', '$edu[0]', '$edu_primary_csi', '$edu_primary_sum', '$edu[1]', \n ";
		$sql .= " '$edu_high_csi', '$edu_high_sum', '$edu[2]', '$edu_bachelor_csi', '$edu_bachelor_sum', '$cash[0]', '$cash_money_csi', '$cash_money_sum', \n ";
		$sql .= " '$cash[1]', '$cash_tack_csi', '$cash_tack_sum', '$first[0]', '$first_first_csi', '$first_first_sum', '$first[1]', \n ";		
		$sql .= " '$first_more_csi', '$first_more_sum', '$likeans[1]', '$likeans[2]', '$likeans[3]', '$likeans[4]', \n ";
		$sql .= " '$likeans[5]', '$likeans[6]', '$likeans[7]', '$sumlike', '$like_no', \n ";
		$sql .= " '$com1[0]', '$com1[1]', '$com2[0]', '$com2[1]', \n ";
		$sql .= " '$com3[0]', '$com3[1]', '$sumpaper', \n";
		$sql .= " '$ans_patient[5]', '$ans_nurse[5]', '$ans_pick[5]', '$gen_m[5]', '$gen_w[5]', \n ";
		$sql .= " '$age1[5]', '$age2[5]', '$age3[5]', '$age4[5]', '$age5[5]', \n ";
		$sql .= " '$edu_primary[5]', '$edu_high[5]', '$edu_bachelor[5]', '$cash_money[5]', '$cash_tack[5]', \n ";
		$sql .= " '$first_first[5]', '$first_more[5]' \n ";
		$sql .= "  ); \n ";
		mysql_query($sql)or die("<pre>$sql</pre>".mysql_error());		




Tag : PHP, MySQL, HTML/CSS







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2014-09-10 11:19:39 By : clubp_mark View : 1138 Reply : 18
 

 

No. 1

Guest


ค่อยๆ เขียนทีละส่วน จากในไปหานอก

เทสทีละอันไปเรื่อยๆ จะได้รู้ว่าผิดตรงไหน

แต่ถ้าจะเปลี่ยนอะไรเพิ่มเติม ก็เขียนใหม่ ของที่เขียนเสร็จแล้ว รันได้ถูกต้องแล้ว จะไม่แตะต้องมันเด็ดขาด

Code (C#)
                StringBuilder sb = new StringBuilder();
                sb.AppendLine("SELECT r1.SectionCode, se.SectionName, r1.ProductCode, p.ProductName, p.GroupID, pg.GroupName, r1.CCtr, c.CCtrShortName AS Sector,");
                sb.AppendLine("CASE WHEN dbo.Zone.ID = 1 THEN dbo.Zone.ZoneName + ' - ' + c.CCtrShortName ELSE dbo.Zone.ZoneName END AS Zone,");
                sb.AppendLine("r1.Balance, ABS(r1.Cancel) * -1 AS Cancel, r1.AccruedRevenue AS Accrued,");
                sb.AppendLine("r1.Balance + (ABS(r1.Cancel) * -1) + r1.AccruedRevenue AS Total");
                sb.AppendLine("FROM (SELECT");
                sb.AppendLine("CASE WHEN invoice.SectionCode IS NULL THEN AccruedRevenue.SectionCode ELSE invoice.SectionCode END AS SectionCode,"); 
                sb.AppendLine("CASE WHEN invoice.ProductCode IS NULL THEN AccruedRevenue.ProductCode ELSE invoice.ProductCode END AS ProductCode,"); 
                sb.AppendLine("CASE WHEN invoice.CCtr IS NULL THEN AccruedRevenue.CCtr ELSE invoice.CCtr END AS CCtr,");
                sb.AppendLine("CASE WHEN invoice.Balance IS NULL THEN 0 ELSE invoice.Balance END AS Balance,");
                sb.AppendLine("CASE WHEN invoice.Cancel IS NULL THEN 0 ELSE invoice.Cancel END AS Cancel,");
                sb.AppendLine("CASE WHEN AccruedRevenue.AccruedRevenue IS NULL THEN 0 ELSE CONVERT(money, AccruedRevenue) END AS AccruedRevenue");
                sb.AppendLine("FROM (SELECT");
                sb.AppendLine("CASE WHEN Balance_0.SectionCode IS NULL THEN Cancel_0.SectionCode ELSE Balance_0.SectionCode END AS SectionCode,"); 
                sb.AppendLine("CASE WHEN Balance_0.ProductCode IS NULL THEN Cancel_0.ProductCode ELSE Balance_0.ProductCode END AS ProductCode,");
                sb.AppendLine("CASE WHEN Balance_0.CCtr IS NULL THEN Cancel_0.CCtr ELSE Balance_0.CCtr END AS CCtr,");
                sb.AppendLine("CASE WHEN Balance_0.Balance IS NULL THEN 0 ELSE Balance_0.Balance END AS Balance,");
                sb.AppendLine("CASE WHEN Cancel_0.balance IS NULL THEN 0 ELSE Cancel_0.balance END AS Cancel");
                sb.AppendLine("FROM (SELECT");
                sb.AppendLine("SectionCode, ProductCode, CCtr, SUM(Balance) AS Balance");
                sb.AppendLine("FROM (SELECT");
                sb.AppendLine("Balance_1.SectionCode, Balance_1.ProductCode,");
                sb.AppendLine("CASE WHEN Home_1.CCtr IS NULL THEN Balance_1.RevenueCode ELSE Home_1.CCtr END AS CCtr,");
                sb.AppendLine("Balance_1.Balance");
                sb.AppendLine("FROM (SELECT");
                sb.AppendLine("Summary_1.SectionCode, Detail_1.ProductCode, Detail_1.RevenueCode, SUM(Detail_1.Balance) AS Balance");
                sb.AppendLine("FROM dbo.Detail AS Detail_1");
                sb.AppendLine("INNER JOIN dbo.Summary AS Summary_1 ON Detail_1.InvoiceNo = Summary_1.InvoiceNo");
                sb.AppendLine("WHERE (Summary_1.InvoiceDate BETWEEN @StartDate AND @EndDate)");
                sb.AppendLine("AND (Summary_1.SectionCode <> '00000') AND (NOT (Summary_1.InvoiceNo LIKE 'MV%'))");
                sb.AppendLine("GROUP BY Summary_1.SectionCode, Detail_1.ProductCode, Detail_1.RevenueCode) AS Balance_1");
                sb.AppendLine("LEFT OUTER JOIN dbo.HomeLocation AS Home_1 ON Balance_1.RevenueCode = Home_1.LocationCode) AS Balance_2");
                sb.AppendLine("GROUP BY SectionCode, ProductCode, CCtr) AS Balance_0");
                sb.AppendLine("FULL OUTER JOIN (");
                sb.AppendLine("SELECT SectionCode, ProductCode, CCtr, SUM(Balance) AS Balance");
                sb.AppendLine("FROM (SELECT");
                sb.AppendLine("Cancel_3.SectionCode, Cancel_3.ProductCode,");
                sb.AppendLine("CASE WHEN hh.cctr IS NULL THEN Cancel_3.RevenueCode ELSE hh.cctr END AS CCtr, ");
                sb.AppendLine("Cancel_3.Balance");
                sb.AppendLine("FROM (SELECT");
                sb.AppendLine("Cancel_2.SectionCode, Detail_2.ProductCode, Detail_2.RevenueCode, SUM(Detail_2.Balance) AS Balance");
                sb.AppendLine("FROM dbo.Detail AS Detail_2");
                sb.AppendLine("INNER JOIN");
                sb.AppendLine("(SELECT Cancel_1.InvoiceNo, Summary_2.SectionCode");
                sb.AppendLine("FROM dbo.Disconnect AS Cancel_1");
                sb.AppendLine("INNER JOIN dbo.Summary AS Summary_2 ON Cancel_1.InvoiceNo = Summary_2.InvoiceNo");
                sb.AppendLine("WHERE (Summary_2.InvoiceDate > @LastYear)");
                sb.AppendLine("AND (Cancel_1.EndDate BETWEEN @StartDate AND @EndDate)");
                sb.AppendLine("AND (Summary_2.SectionCode <> '00000') AND (NOT (Summary_2.InvoiceNo LIKE 'MV%'))) AS Cancel_2 ON Detail_2.InvoiceNo = Cancel_2.InvoiceNo");
                sb.AppendLine("GROUP BY Cancel_2.SectionCode, Detail_2.ProductCode, Detail_2.RevenueCode) AS Cancel_3");
                sb.AppendLine("LEFT OUTER JOIN dbo.HomeLocation AS hh ON Cancel_3.RevenueCode = hh.LocationCode) AS Cancel");
                sb.AppendLine("GROUP BY SectionCode, ProductCode, CCtr) AS Cancel_0 ON Balance_0.SectionCode = Cancel_0.SectionCode");
                sb.AppendLine("AND Balance_0.ProductCode = Cancel_0.ProductCode AND Balance_0.CCtr = Cancel_0.CCtr) AS Invoice");
                sb.AppendLine("FULL OUTER JOIN (");
                sb.AppendLine("SELECT SectionCode, ProductCode, CCTR, Amount1, Amount2, Amount1 + Amount2 AS AccruedRevenue");
                sb.AppendLine("FROM (SELECT");
                sb.AppendLine("CASE WHEN m1.docdate IS NULL THEN m2.docdate ELSE m1.docdate END AS DocDate,"); 
                sb.AppendLine("CASE WHEN m1.SectionCode IS NULL THEN m2.SectionCode ELSE m1.SectionCode END AS SectionCode,"); 
                sb.AppendLine("CASE WHEN m1.ProductCode IS NULL THEN m2.ProductCode ELSE m1.ProductCode END AS ProductCode,"); 
                sb.AppendLine("CASE WHEN m1.CCTR IS NULL THEN m2.CCTR ELSE m1.CCTR END AS CCTR,");
                sb.AppendLine("CASE WHEN m1.Amount IS NULL THEN 0 ELSE m1.Amount END AS Amount1,");
                sb.AppendLine("CASE WHEN m2.Amount IS NULL THEN 0 ELSE m2.Amount END AS Amount2");
                sb.AppendLine("FROM (SELECT");
                sb.AppendLine("SectionCode, CCTR, ProductCode, ABS(SUM(Amount)) * - 1 AS Amount,");
                sb.AppendLine("DATEADD(mm, 1, CONVERT(smalldatetime, '1/' + CONVERT(nvarchar(2), MONTH(DocDate)) + '/' + CONVERT(nvarchar(4), YEAR(DocDate), 103))) AS DocDate");
                sb.AppendLine("FROM dbo.AccruedRevenue AS AccruedRevenue_4");
                sb.AppendLine("WHERE (CONVERT(smalldatetime, '1/' + CONVERT(nvarchar(2), MONTH(DocDate)) + '/' + CONVERT(nvarchar(4), YEAR(DocDate), 103)) <> (");
                sb.AppendLine("SELECT MAX(CONVERT(smalldatetime, '1/' + CONVERT(nvarchar(2), MONTH(DocDate)) + '/' + CONVERT(nvarchar(4), YEAR(DocDate), 103))) AS DocDate");
                sb.AppendLine("FROM dbo.AccruedRevenue AS AccruedRevenue_1))");
                sb.AppendLine("GROUP BY SectionCode, CCTR, ProductCode, YEAR(DocDate), MONTH(DocDate)) AS m1");
                sb.AppendLine("FULL OUTER JOIN (");
                sb.AppendLine("SELECT SectionCode, CCTR, ProductCode, SUM(Amount) AS Amount,");
                sb.AppendLine("CONVERT(smalldatetime, '1/' + CONVERT(nvarchar(2), MONTH(DocDate)) + '/' + CONVERT(nvarchar(4), YEAR(DocDate), 103)) AS DocDate");
                sb.AppendLine("FROM dbo.AccruedRevenue AS AccruedRevenue_3");
                sb.AppendLine("WHERE (CONVERT(smalldatetime, '1/' + CONVERT(nvarchar(2), MONTH(DocDate)) + '/' + CONVERT(nvarchar(4), YEAR(DocDate), 103)) <> (");
                sb.AppendLine("SELECT MIN(CONVERT(smalldatetime, '1/' + CONVERT(nvarchar(2), MONTH(DocDate)) + '/' + CONVERT(nvarchar(4), YEAR(DocDate), 103))) AS DocDate");
                sb.AppendLine("FROM dbo.AccruedRevenue AS AccruedRevenue_2))");
                sb.AppendLine("GROUP BY SectionCode, CCTR, ProductCode, YEAR(DocDate), MONTH(DocDate)) AS m2 ON m1.SectionCode = m2.SectionCode");
                sb.AppendLine("AND m1.CCTR = m2.CCTR AND m1.ProductCode = m2.ProductCode");
                sb.AppendLine("AND m1.DocDate = m2.DocDate) AS Accrued_1");
                sb.AppendLine("WHERE (DocDate = @StartDate)) AS AccruedRevenue ON Invoice.SectionCode = AccruedRevenue.SectionCode");
                sb.AppendLine("AND Invoice.ProductCode = AccruedRevenue.ProductCode AND Invoice.CCtr = AccruedRevenue.CCTR) AS r1");
                sb.AppendLine("INNER JOIN dbo.Section AS se ON r1.SectionCode = se.SectionCode");
                sb.AppendLine("LEFT OUTER JOIN dbo.Product AS p ON r1.ProductCode = p.ProductCode");
                sb.AppendLine("LEFT OUTER JOIN dbo.CostCenter AS c ON r1.CCtr = c.CCtr");
                sb.AppendLine("LEFT OUTER JOIN dbo.Zone ON c.ZoneID = dbo.Zone.ID");
                sb.AppendLine("LEFT OUTER JOIN dbo.ProductGroup AS pg ON p.GroupID = pg.ID");
                sb.AppendLine("ORDER BY r1.SectionCode, p.GroupID, r1.ProductCode, r1.CCtr ASC");







แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-10 11:30:24 By : ห้ามตอบเกินวันละ 2 กระทู้
 


 

No. 2



โพสกระทู้ ( 50 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ตอบความคิดเห็นที่ : 1 เขียนโดย : ห้ามตอบเกินวันละ 2 กระทู้ เมื่อวันที่ 2014-09-10 11:30:24
รายละเอียดของการตอบ ::
โอ้ววว เจอยิ่งกว่า

ขอบคุณครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-10 11:32:59 By : clubp_mark
 

 

No. 3



โพสกระทู้ ( 2,311 )
บทความ ( 1 )



สถานะออฟไลน์


แนะนำให้เขียนประมาณนี้ครับ ดูง่ายดี แยกเป็นส่วนๆ
Code (PHP)
$sql = "	INSERT INTO tbl_content_1234(
																content_name 
																, content_detail 
																, content_profile 
																, content_start_date 
																, content_end_date 
																, content_status 
																, content_view  
																, content_type 
																, content_date 
																, content_time 
																, content_admin 
																, content_ip)
															VALUES(
																'$title' 
																, '$detail' 
																, '$imgProfile' 
																, '$start_date' 
																, '$end_date' 
																, '1' 
																, '0' 
																, '0' 
																, '$today' 
																, '$time' 
																, '$_SESSION[mem_uname]'
																, '$_SERVER[REMOTE_ADDR]'
															)
														"

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-10 11:50:16 By : arm8957
 


 

No. 4



โพสกระทู้ ( 50 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ตอบความคิดเห็นที่ : 3 เขียนโดย : arm8957 เมื่อวันที่ 2014-09-10 11:50:16
รายละเอียดของการตอบ ::
ขอบคุณครับ แต่ผมว่าแบบนี้ คงเลื่อนเม้าท์กันสุดฤทธิ์ T^T

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-10 13:03:05 By : clubp_mark
 


 

No. 5



โพสกระทู้ ( 1,994 )
บทความ ( 10 )



สถานะออฟไลน์
Facebook Blogger

สร้างอาร์เรย์ครับ คล้ายๆแบบนี้ http://www.sunzan-design.com/2013/03/php-implode-how-to.html
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-10 13:36:09 By : {Cyberman}
 


 

No. 6



โพสกระทู้ ( 50 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ตอบความคิดเห็นที่ : 5 เขียนโดย : {Cyberman} เมื่อวันที่ 2014-09-10 13:36:09
รายละเอียดของการตอบ ::
ขอบคุณครับ

แต่แบบนั้น เป็นแบบกรณีมีข้อมูลหลายแถวนิครับ
ของผมแถวเดียว แต่ฟิลด์มันเยอะ T^T

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-10 13:39:09 By : clubp_mark
 


 

No. 7



โพสกระทู้ ( 1,994 )
บทความ ( 10 )



สถานะออฟไลน์
Facebook Blogger

หมายถึงแบบนี้ครับ
<?php

 $cal_id = '2';
 $ans[0] = '3';
 $ans_patient_csi = '4';
 $ans_patient_sum = '5';


$data = array(
			'cal_id' => $cal_id, 
			'ans_patient' => $ans[0], 
			'ans_patient_csi' => $ans_patient_csi, 
			'ans_patient_sum' => $ans_patient_sum
		);

$field = implode(', ', array_keys($data));
$value = "'". implode("', '", array_values($data)) . "'";

$sql = "INSERT INTO cal_info ($field) VALUES ($value)";

echo $sql;

?>

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-10 21:34:14 By : {Cyberman}
 


 

No. 8



โพสกระทู้ ( 1,994 )
บทความ ( 10 )



สถานะออฟไลน์
Facebook Blogger

อาร์เรย์ $data จะใช้เอาไปสร้าง INSERT หรือ UPDATE ก็ได้
และขั้นตอนการพิมพ์ก้ไม่มีพลาด เพราะซ้ายคือชื่อฟิลด์ ขวาคือค่าที่ต้องการบันทึก ไม่มีหลงฟิลด์ครับ


เมื่อเช้าผมหาลิงค์ไม่เจอ อันนี้ลิงค์ใหม่นะครับมีตัว DEMO ให้ลองเล่นด้วย
http://www.sunzan-design.com/2013/05/php-codeing-generate-sql-insert-command.html


ปล. มีซอร์สโค๊ดในหน้า DEMO และตัวอย่างผลลัพธ์ 3 แบบที่นำไปใช้งานต่อไป
แบบที่ 3 คือตัวอย่างที่ผมแนะนำไปในคอมเมนต์ก่อนหน้านี้ครับ


ประวัติการแก้ไข
2014-09-10 21:37:54
2014-09-10 21:39:52
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-10 21:35:44 By : {Cyberman}
 


 

No. 9



โพสกระทู้ ( 50 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ตอบความคิดเห็นที่ : 8 เขียนโดย : {Cyberman} เมื่อวันที่ 2014-09-10 21:35:44
รายละเอียดของการตอบ ::
ถ้าในข้อมูลที่ insert มี , จะมีปัญหามั้ยครับ

ขอบคุณครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-10 22:36:14 By : clubp_mark
 


 

No. 10



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



สถานะออฟไลน์


ถ้าชำนาญแล้วก็เปลี่ยนไปใช้พวก db class อย่าง phpadodb ที่เป็น active record มันช่วยกัน sql injection ได้และโค้ดดูง่ายด้วย

ถ้าชำนาญขึ้นไปอีกก็เปลี่ยนไปใช้ framework เดี๋ยวนี้มีพวก ORM, active record, query builder มาให้ใช้เต็มไปหมด เลือกตามความเหมาะ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-11 07:27:34 By : mr.v
 


 

No. 11



โพสกระทู้ ( 1,994 )
บทความ ( 10 )



สถานะออฟไลน์
Facebook Blogger

ถ้าในข้อมูลที่ insert มี , จะมีปัญหามั้ยครับ




Code (SQL)
INSERT INTO cal_info (field1) VALUES ('Hello, my name is Cyberman')


สำหรับเครื่องหมายลูกน้ำ (,) ไม่เคยเจอปัญหาตอนคิวรี่นะครับ จะเจอก็แต่เครื่องหมายฟันเดี่ยว (') single qoute
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-11 07:28:57 By : {Cyberman}
 


 

No. 12



โพสกระทู้ ( 1,994 )
บทความ ( 10 )



สถานะออฟไลน์
Facebook Blogger

สำหรับการป้องกัน SQL Injection ขอนำเสนอวิธีนี้ครับ mysql_real_escape_string

กรณีส่งข้อมูลมาแบบ POST

<?php

$_POST = array_map ('mysql_real_escape_string', $_POST);


$data = array(
			'cal_id' => $_POST['cal_id'], 
			'ans_patient' => $_POST['ans'][0], 
			'ans_patient_csi' => $_POST['ans_patient_csi'], 
			'ans_patient_sum' => $_POST['ans_patient_sum']
		);

$field = implode(', ', array_keys($data));
$value = "'". implode("', '", array_values($data)) . "'";

$sql = "INSERT INTO cal_info ($field) VALUES ($value)";

echo $sql;

?>



ประวัติการแก้ไข
2014-09-11 07:32:37
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-11 07:32:08 By : {Cyberman}
 


 

No. 13



โพสกระทู้ ( 50 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ตอบความคิดเห็นที่ : 12 เขียนโดย : {Cyberman} เมื่อวันที่ 2014-09-11 07:32:08
รายละเอียดของการตอบ ::
ขอบคุณมากๆๆเลยครับ

เพิ่งรู้ว่า array_map เอามาใช้กับ mysql_real_escape_string ได้
ที่ผ่านมา เซ็ตทีละตัวตลอดเลย

ขอบคุณครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-11 08:21:41 By : clubp_mark
 


 

No. 14

Guest


- orm ไม่เหมาะกับ query ที่ซับซ้อน มันช้า (แต่ insert คำสั่งเดียวยาวๆ แบบนี้ไม่มีปัญหา)

- ทำไมลองดูส่งค่าแบบ parameter หน่อยเหรอ php มันไปถึง v.5.6 แล้วนะ ยังต่อ string กันอยู่อีกหรือ

ใน database ข้อมูลมันมี type นะ ไม่ได้เหมือน php ดังนั้นส่งแบบ parameter แล้วระบุ type ไปด้วย

จะได้ไม่ต้องระวังข้อมูลแปลงผิด

- ทำไม table ใหญ่จัง ได้ทำ normalization หรือยังจ๊ะ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-11 08:35:32 By : ห้ามตอบเกินวันละ 2 กระทู้
 


 

No. 15



โพสกระทู้ ( 50 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ตอบความคิดเห็นที่ : 14 เขียนโดย : ห้ามตอบเกินวันละ 2 กระทู้ เมื่อวันที่ 2014-09-11 08:35:32
รายละเอียดของการตอบ ::
- ยังไม่ได้ทำแบบ OOP ครับ เพราะยังไม่ไดถนัดเลย ไม่กล้าเขียนครับ
- เพราะคิดว่าเป็นตารางชั่วคราวในการเก็บการคำนวณ เลยไม่ได้ normalization ครับ

Quote:
ส่งแบบ parameter แล้วระบุ type ไปด้วย

รบกวนช่วยขยายตรงนี้ หรือยกตัวอย่างให้ดูจะได้ไหมครับ

ขอบคุณครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-11 08:57:27 By : clubp_mark
 


 

No. 16



โพสกระทู้ ( 9,586 )
บทความ ( 2 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 7 เขียนโดย : {Cyberman} เมื่อวันที่ 2014-09-10 21:34:14
รายละเอียดของการตอบ ::
เอาของท่านมาปรับปรุงนิดหน่อยครับ เปลี่ยนจากการใช้คำสั่ง implode มาเขียนเป็น function เอง
เขียน function สำหรับ Insert และ update


Code (PHP)
<?php
function  set_array_for_sql( $arr, $type){
	if($type == 'Insert'){ // for insert
		$field=''; $result = '';
		foreach($arr as $k=>$vl){
			$field .= ($field>'' ?  ' , ' : '' ) . $k;
			$result .= ($result>'' ?  ',' : '' ) . " '" .  mysql_real_escape_string ( $vl ) . "' ";
		}
		return "( $field ) values ( $result )";
	}else{ // for update
		$result = '';
		foreach($arr as $k=>$vl){
			$result .= ($result>'' ?  ' , ' : ' set ' ) . $k . " = '" .  mysql_real_escape_string ( $vl ) . "' ";
		}
		return $result;
	}
}

$cal_id = '2';
$ans[0] = '3';
$ans_patient_csi = '4';
$ans_patient_sum = '5';

$data = array(
	'cal_id' => $cal_id, 
	'ans_patient' => $ans[0], 
	'ans_patient_csi' => $ans_patient_csi, 
	'ans_patient_sum' => $ans_patient_sum
);

$sql_insert = "INSERT INTO table " . set_array_for_sql( $data, 'Insert' );
$sql_update = 'update table ' . set_array_for_sql( $data , 'update' );
?>



ประวัติการแก้ไข
2014-09-11 09:20:39
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-11 09:19:57 By : Chaidhanan
 


 

No. 17

Guest


ตอบความคิดเห็นที่ : 15 เขียนโดย : clubp_mark เมื่อวันที่ 2014-09-11 08:57:27
รายละเอียดของการตอบ ::
mysqli

mysqli class

mysqli::prepare

mysqli_stmt::bind_param


PDO

PDO class

PDO::prepare

PDOStatement::bindParam

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-11 09:30:39 By : ห้ามตอบเกินวันละ 2 กระทู้
 


 

No. 18



โพสกระทู้ ( 50 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ตอบความคิดเห็นที่ : 16 เขียนโดย : Chaidhanan เมื่อวันที่ 2014-09-11 09:19:57
รายละเอียดของการตอบ ::
ขอบคุณครับ


ตอบความคิดเห็นที่ : 17 เขียนโดย : ห้ามตอบเกินวันละ 2 กระทู้ เมื่อวันที่ 2014-09-11 09:30:39
รายละเอียดของการตอบ ::
ขอบคุณครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-11 09:40:56 By : clubp_mark
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : อยากรู้ว่าแต่ละท่านจัดการ การเขียน sql กับ php ยังไง ไม่ให้ตาลายครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 04
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่