下面是mysql插入在php中运行的I。我已经删除了给出错误的部分,但是在下一篇文章中我得到了一个错误。我看不出是什么不同的原因造成了错误。
$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=‘删除’,l_name=‘已删除’,regnum=,item='JS900CV',qsver=‘,flashrom='',扩展=’‘,rdisplay=’,screen_model=‘,p_hardware=’,pcolor=‘,pname=’,kboard='',ip='192.168.1.16',reg_name=‘,mem=,dt_server=’,警告‘,ows=’,w_date‘’,‘qsver=’,s_size='',mag='',rcard='',kvsid=3,finger='',独立自主,标准=‘’,配置文件=‘’,man_date='',l_sn='',misc='misc test\r\n',问题=‘gen test’
根据我在语句中输入的内容,错误正在更改语句中的点。并非所有字段都被使用,表单是动态的,它提供数据,因此字段取决于选择了哪些选项。另外,在考虑使用$_POST直接插入mysql时,我首先对数组进行净化。任何帮助都将不胜感激。
发布于 2012-12-26 21:23:14
您正在使用一种非常非常糟糕的方法来处理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-26 21:21:31
看看regnum=,。您没有为regnum提供一个值。要么将其完全删除,要么将其设置为适当的值。
发布于 2012-12-26 21:24:08
Regnum=“,$_POST‘’regnum‘。是造成问题的原因。当它未定义时,将在SQL查询中获得regnum=。
更重要的是,你并没有逃避你的投入。或者在它们周围使用mysql_real_escape_string,或者更好地使用准备好的语句。
https://stackoverflow.com/questions/14046387
复制相似问题