2011-03-21 74 views
0
$lastname = clean($_SESSION['lastname']); 
$firstname = clean($_SESSION['firstname']); 
$mi = clean($_SESSION['mi']); 
$nickname = clean($_SESSION['nickname']); 
$studentno = clean ($_SESSION['studentno']); 
$password = clean ($_SESSION['password']); 
$cpassword = clean ($_SESSION['cpassword']); 
$bdate = clean($_POST['bdate']); 
$maddress = clean($_POST['maddress']); 
$paddress = clean($_POST['paddress']); 
$status = clean($_POST['status']); 
$religion = clean($_POST['religion']); 
$telno = clean($_POST['telno']); 
$celno = clean($_POST['celno']); 
$email = clean($_POST['email']); 
$nationality = clean($_POST['nationality']); 
$batch = clean($_POST['batch']); 
$dept = clean($_POST['dept']); 
$course = clean($_POST['course']); 
$achvmnts = clean($_POST['achvmnts']); 
$emp = clean($_POST['emp']); 
$empadd = clean($_POST['empadd']); 
$position = clean($_POST['position']); 
$emptelno = clean($_POST['emptelno']); 
$empemail = clean($_POST['empemail']); 

我已經對於其中前7正在從保存的會話中檢索上述值以下INSERT查詢,一切都被聲明爲除字段VARCHAR bdate =日期,celno和studentno = BIGINT, :插入語句問題

$result = mysql_query("INSERT INTO `$dept`(lastname,firstname, mi,nickname,bdate,maddress,paddress,status,religion,telno,celno,email,nationality,password,studentno,batch,dept,course,achvmnts,emp,empadd,position) VALUES 
('$lastname','$firstname','$mi','$nickname','$bdate', '$maddress','$paddress','$status,','$religion','$telno',$celno,'$email','$nationality','$password',$studentno,'$batch', '$dept','$course','$achvmnts','$emp','$empadd,'$position')"); 

。我似乎無法找到此查詢中的錯誤,幾個小時我一直在收到「查詢錯誤」。任何人都可以請幫我找到錯誤。提前致謝!

+0

查詢刺痛分配給一個變種,所以你可以重複它。 – 2011-03-21 19:44:58

+0

請注意''$ status'中有一個逗號,' - 這不會導致錯誤,但無論如何可能都是錯誤的。這是真的嗎? – Czechnology 2011-03-21 19:50:32

回答

4

。在你插入一個錯誤在那裏:

'$empadd, '$position')"); 

的2報價缺少

如果多數民衆贊成這個問題應該工作。

(編輯:刪除,在「$地位,」因爲有人在評論中提到

+0

我把我的評論移到了問題上(它更多地屬於這個問題)。逗號可能是有意的。 – Czechnology 2011-03-21 19:53:50

+0

葉我認識到,雖然它仍然看起來很奇怪,但我認爲這是一個錯誤 – 2011-03-21 19:55:52

0

我不相信你需要在INSERT INTO「$部門」的報價另外,我覺得你的報價是不同的,$ studentno沒有報價,我不確定這是否是故意的。最後,你可以發佈確切的查詢錯誤:

+0

他們不是'$ dept'周圍的引用,他們反引號。他們告訴mysql'$ dept'標識一個表(或數據庫,索引,列等)。嚴格來說,查詢*中的所有列名稱都應該用反引號標記。 – 2011-03-21 19:52:11

+0

@adam不,不應該。必須,但僅當它們與保留名稱(例如「用戶」)相沖突時纔會發生。否則,請離開它們。他們是一個可移植性問題和一個眼睛。 – hhaamu 2011-03-21 20:09:22

+0

(以及Varying Case區分的多個列/表,但這是一個糟糕的做法) – hhaamu 2011-03-21 20:10:52

0

首先,這是一個可笑的巨大INSERT正在做。我記下的東西

  1. '$status,',看起來不正確。使用試用逗號的狀態
  2. '$empadd,缺少尾部報價
  3. $celno未置於報價單內。這是有風險的。所有電話號碼都應該存儲爲VARCHAR字段。
  4. 考慮使用sprintfmysql_real_escape_string以確保您的變量格式正確。有關更多信息,請參閱mysql_real_escape_stringsprintf上的PHP手冊文檔。
0

代碼可能有點更具可讀性,並從重複而導致的錯誤少開:

$session_columns = array('lastname','firstname','mi','nickname','studentno', 
    'password','cpassword'); 
$post_columns = array('bdate','maddress','paddress','status','religion','telno', 
    'celno','email','nationality','batch','dept','course','achvmnts','emp', 
    'empadd','position','emptelno','empemail'); 

$assignments = array(); 
foreach ($session_columns as $column) 
    $assignments[] = sprintf("$column = '%s'", clean($_SESSION[$column])); 
foreach ($post_columns as $column) 
    $assignments[] = sprintf("$column = '%s'", clean($_POST[$column])); 

$sql = "INSERT INTO `$dept` SET ".implode(', ', $assignments);