2011-03-21 64 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);