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

我的php页面上有一个SQL语法错误,php,mysql,sql,syntax,insert,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-

下面是我在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”

我收到回信

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“item='JS900CV',qsver=''、flashrom=''、expansion=''、rdisplay=''、screen_model=''附近使用的正确语法 大宗报价

如果我回显$query,我会得到以下结果:

插入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',regu name='',mem=,dt_server='',alert='',alert='',ows='',w='',w='',w='',w='',w='',flashromver='',s_size='',mag='',rcard='',kvsid=3,finger='',单机版='',标准='',配置文件='',人工日期='',l_序列号='',杂项测试\r\n',问题='gen测试'


根据我在错误中输入的内容,语句中的点会发生变化。并非所有字段都使用。表单是动态的,提供数据,因此字段取决于选择的选项。为了避免担心使用
$\u POST
直接插入mysql,我先清理数组。任何帮助都将不胜感激

查看
regnum=,
。您没有为
regnum
提供值。要么完全忽略它,要么将其设置为适当的值。

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

不要使用
mysql.*
函数,而是使用

您的代码如下所示(简化):

regnum=“.$\u POST['regnum']”导致问题。如果未定义,则在SQL查询中获得regnum=


一个更大的问题是你没有逃避你的投入。可以使用mysql\u real\u escape\u字符串,或者更好地使用准备好的语句。

您需要设置regnum=SOMETHING


当前它是空的。

那么因为regnum中没有数据,所以它给出了错误?因此,我需要在没有空字段的情况下构建insert语句?@new_to_这是的,要么省略字段,要么提供一个值。在查询之前,我有一个针对$_POST数组运行的函数:它运行mysql_real_escape_string,去掉jave、html和样式标记。好的,谢谢,这看起来确实更易于设置和维护。更安全是一个额外的好处,也感谢您的帮助。然后,这种方法是否可以绕过发送导致我出现问题的空字段,或者我是否仍然只需要发送用于提交的字段?这种方法将自动插入空字符串、零或空值,具体取决于POST数据。不需要计算缺少的字段。太好了,非常感谢。这将帮助我清理我的许多网页。
// 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']));