แบบสอบถาม mysql (แทรก) ภายในฟังก์ชันไม่สามารถดำเนินการได้

ฉันมีฟังก์ชั่นเช่นนี้:

function record(){
$table = new table;
$clogin = new login;
$date = date("F j, Y, g:i a"); 
$ip =  $_SERVER['REMOTE_ADDR'];
$uri = $_SERVER['REQUEST_URI'];
mysql_query("insert into log (player, date, ip, on) values ('$clogin->username', '$date', '$ip', '$uri')");
$fopen = fopen("data/log.txt", "a+");
fwrite ($fopen, "PLAYER: $clogin->username DATE: $date IP: $ip ON: $uri\n");
fclose ($fopen); }

ฉันยังมีแบบสอบถาม mysql อื่นในฟังก์ชั่นอื่นและมันก็ใช้งานได้ และ fopen, fwrite และ fclose ก็ดำเนินการอย่างถูกต้องเช่นกัน ฉันสงสัยว่าทำไมในฟังก์ชันนี้แบบสอบถามจึงไม่ทำงาน ฉันเขียนคำถามผิดหรือเปล่า?


person 01001101    schedule 04.01.2012    source แหล่งที่มา
comment
ข้อผิดพลาดที่คุณได้รับคืออะไร? และใช่ ตามที่ Lukas ชี้ให้เห็น คุณกำลังทำให้ตัวเองเสี่ยงต่อการฉีด SQL :)   -  person Aaron J Spetner    schedule 04.01.2012
comment
ไม่มีการรายงานข้อผิดพลาด ฉันเพิ่ม mysql_query อื่น (เลือก) ภายในฟังก์ชันนั้นและทำงานได้อย่างถูกต้อง แต่ส่วนแทรกไม่ทำงาน ส่วนใดที่ทำให้ฉันอ่อนแอต่อการฉีด SQL $uri?   -  person 01001101    schedule 04.01.2012


คำตอบ (1)


เนื่องจากทั้งสองฟิลด์ของตาราง LOG เป็น Reserved Word ใน mySQL (DATE และ ON) ให้ใช้เครื่องหมายย้อนกลับ ( `) ก่อนและหลังฟิลด์แทน

แบบนี้:

INSERT INTO `tableName`(`fieldA`,`fieldB`,`fieldB`) VALUES ('','','');
person John Woo    schedule 04.01.2012
comment
ยินดีต้อนรับ. คุณต้องยอมรับคำตอบนี้เพื่อให้ผู้อื่นทราบว่าคำถามของคุณได้รับคำตอบแล้ว - person John Woo; 04.01.2012