php
  • mysql
  • sql
  • syntax
  • insert
  • 2012-12-26 66 views 0 likes 
    0

    这里是mysql插入我在php中运行。我已经删除了发生错误的部分,但是接下来的部分会出现错误。我没有看到什么是不同的导致错误。我在我的php页面上有一个SQL语法错误

    $fields="adv_exchange SET synum='".$synum."', worknum='".$_POST['worknum']."', user_id='".$current_user->ID."', f_name='".$current_user->user_firstname."', l_name='".$current_user->user_lastname."', email='".$current_user->user_email."', regnum=".$_POST['regnum'].", item='".$item."', qsver='".$_POST['qsver']."', flashrom='".$_POST['flashrom']."',expansion='".$_POST['board']."', rdisplay='". $_POST['rdisplay']."', screen_model='".$_POST['screen_model']."', p_hardware='".$_POST['cable']."', pcolor='".$_POST['pcolor']."', pname='".$_POST['pname']."', kboard='".$_POST['kboard']."', ip='".$_POST['ip']."', reg_name='".$_POST['reg_name']."', mem=".$_POST['mem'].", dt_server='".$_POST['dt_server']."', alert='".$_POST['alert']."', ows='".$_POST['ows']."', w_date='".$_POST['w_date']."', flashromver='".$_POST['flashromver']."', s_size='".$_POST['s_size']."', mag='".$_POST['mag']."', rcard='".$_POST['rcard']."', kvsid=".$_POST['kvsid'].", finger='".$_POST['finger']."', stand_alone='".$_POST['stand_alone']."', standards='".$_POST['standards']."', profile='".$_POST['profile']."', man_date='".$_POST['man_date']."', l_sn='".$_POST['l_sn']."', misc='".$_POST['misc']."', problem='".$_POST['problem']."'"; 
    

    then $ query =“insert into $ fields”;

    我收到回

    您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以便在'item ='JS900CV',qsver ='',flashrom ='',expansion ='',rdisplay ='',screen_model =''附近使用正确的语法1 大段引用

    如果我呼应$查询我得到这个:

    插入到adv_exchange SET synum = 'SY5135',worknum = '123456',USER_ID = '2',f_name =” REMOVED',l_name ='REMOVED',email ='REMOVED',regnum =,item ='JS900CV',qsver ='',flashrom ='',expansion ='',rdisplay ='',screen_model ='',p_hardware ='',pcolor ='',pname ='',kboard ='',ip ='192.168.1.16',reg_name ='',mem =,dt_server ='',alert ='',ows ='', w_date ='',flashromver ='',s_size ='', mag ='',rcard ='',kvsid = 3,finger ='',stand_alone ='',standards ='',profile ='',man_date ='',l_sn ='',misc ='misc test \ r \ n',问题='gen test'

    根据我在错误中输入的内容改变我的声明中的位置。并非所有字段都使用表单是动态的提供数据,所以这些字段取决于选择的选项。在关注使用$_POST直接插入到mysql的情况下,我会首先清理数组。任何帮助将不胜感激。

    回答

    3

    您对MySQL数据库使用非常非常糟糕的方法:手动创建查询。您应该真正使用准备好的语句:此问题也将得到解决。

    请勿使用mysql_*功能,请改用PDO

    您的代码看起来像这样(简化):

    // This holds the query 
    $statement = $pdo->prepare('INSERT INTO adv_exchange SET synum=?, worknum=?, etc=?, problem=?'); 
    
    // This executes it with the given arguments. It's 100% injection-proof and safe. In fact, it's also faster. 
    $statement->execute(array($synum, $_POST['worknum'], $_POST['therest'], $_POST['problem'])); 
    
    +0

    好的谢谢,看起来更容易安装和维护。更安全的是奖金也感谢你的帮助。 –

    +0

    这种方法会绕过发送导致我的问题的空字段吗?还是我仍然只需要发送正在用于该提交的字段? –

    +0

    这种方法会根据POST数据自动插入空字符串,零或NULL值。无需计算缺少的字段。 –

    4

    看看regnum=,。您不提供regnum的值。要么将其全部保留,要么将其设置为适当的值。

    +0

    那么因为regnum中没有数据会给出错误?所以我需要建立没有空字段的插入语句呢? –

    +0

    @new_to_this是的,要么忽略字段要么提供值。 –

    0

    REGNUM = “$ _ POST [ 'REGNUM'。”正在造成这个问题。当它未定义时,您会在SQL查询中得到regnum =,

    更大的问题是您没有逃避您的输入。要么在它们周围使用mysql_real_escape_string,要么使用预准备语句。

    +0

    我有一个函数,我的查询之前运行$ _POST数组:运行mysql_real_escape_string,条纹出jave,html和样式标签。 –

    0

    您需要SET regnum = SOMETHING。

    目前为空。

    相关问题