0

这是我在 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 服务器版本相对应的手册,以在 'item='JS900CV', qsver='', flashrom='',expansion='', rdisplay='', screen_model='' 行附近使用正确的语法1 块引用

如果我回显 $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 ', 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',problem='gen test '

根据我在错误中输入的内容,我的陈述中会发生变化。并非所有字段都被使用,表单是动态的,提供数据,因此字段取决于选择的选项。附带说明一下,如果担心使用$_POST直接插入到 mysql 中,我会先清理数组。任何帮助将不胜感激。

4

4 回答 4

4

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

于 2012-12-26T21:21:31.473 回答
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']));
于 2012-12-26T21:23:14.687 回答
0

regnum=".$_POST['regnum']。" 导致问题。当它未定义时,您会在 SQL 查询中获得 regnum=,

更大的担忧是您没有逃避输入。要么在它们周围使用 mysql_real_escape_string,要么更好地使用准备好的语句。

于 2012-12-26T21:24:08.690 回答
0

您需要设置 regnum=SOMETHING。

目前它是空的。

于 2012-12-26T21:24:58.653 回答