我的php页面上有一个SQL语法错误

时间:2012-12-26 21:18:34

标签: php mysql sql syntax insert

这是我在php中运行的mysql插件。我删除了出错的部分,但后来我得到了错误。我没有看到导致错误的不同之处。

$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']."'";

然后$ query ="插入$ fields&#34 ;;

我收到了回复

  

您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以获得正确的语法,以便在'附近使用。 item =' JS900CV',qsver ='',flashrom ='',expand ='',rdisplay =' ',screen_model =''在第1行   块引用

如果我回复$ query,我会得到这个:

  

插入adv_exchange SET synum =&#39; SY5135&#39;,worknum =&#39; 123456&#39;,user_id =&#39; 2&#39;,f_name =&#39; REMOVED&#39; ,l_name =&#39; REMOVED&#39;,email =&#39; REMOVED&#39;,regnum =,item =&#39; JS900CV&#39;,qsver =&#39;&#39;,flashrom = &#39;&#39;,展开=&#39;&#39;,rdisplay =&#39;&#39;,screen_model =&#39;&#39;,p_hardware =&#39;&# 39;,pcolor =&#39;&#39;,pname =&#39;&#39;,kboard =&#39;&#39;,ip =&#39; 192.168.1.16&#39;, reg_name =&#39;&#39;,mem =,dt_server =&#39;&#39;,alert =&#39;&#39;,ows =&#39;&#39;,w_date =& #39;&#39;,flashromver =&#39;&#39;,s_size =&#39;&#39;,mag =&#39;&#39;,rcard =&#39;&#39; ;,kvsid = 3,finger =&#39;&#39;,stand_alone =&#39;&#39;,standards =&#39;&#39;,profile =&#39;&#39;, man_date =&#39;&#39;,l_sn =&#39;&#39;,misc =&#39; misc test \ r \ n&#39;,问题=&#39; gen test&#39; < / p>

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

4 个答案:

答案 0 :(得分:4)

看看regnum=,。您没有为regnum提供值。要么完全放弃,要么将其设置为适当的值。

答案 1 :(得分: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']));

答案 2 :(得分:0)

REGNUM = “$ _ POST [ 'REGNUM']”。造成了这个问题。如果未定义,则在SQL查询中获得regnum =

更大的担忧是你没有逃避你的投入。要么使用mysql_real_escape_string,要么更好,使用预处理语句。

答案 3 :(得分:0)

你需要SET regnum = SOMETHING。

目前它是空的。