2012-07-16 51 views
0

现在我有这样的代码部分:如何正确的PHP MySQL查询

$q_ins='INSERT INTO `TOF_ARTICLES` VALUES (''.$r['ART_ID'].'',''.$r['ART_ARTICLE_NR'].'',''.$r['ART_SUP_ID'].'',''.$r['ART_DES_ID'].'',''.$r['ART_COMPLETE_DES_ID'].'',''.$r['ART_CTM'].'',''.$r['ART_PACK_SELFSERVICE'].'',''.$r['ART_MATERIAL_MARK'].'',''.$r['ART_REPLACEMENT'].'',''.$r['ART_ACCESSORY'].'',''.$r['ART_BATCH_SIZE1'].'',''.$r['ART_BATCH_SIZE2'].'');'; 

但是PHP说:

Parse error: syntax error, unexpected T_STRING in X:\denwer\www\denwer\td.php on line 40

有什么不对?我明白有些语法,但是什么?如何正确?

+0

1.那么,我开始看到2 ;; 2.太多的单引号。 3.看起来你直接输入了输入权限,没有任何消毒处理,你应该清理它,将它传递给变量,为了清晰起见,你可以将它映射到每个值要输入的列。并检查互联网上的任何代码片段如何做到这一点 – iaintunderstand 2012-07-16 16:29:40

+0

请不要使用'mysql_ *'函数来编写新代码。他们不再维护,社区已经开始[弃用程序](http://goo.gl/KJveJ)。查看[*红色框*](http://goo.gl/GPmFd)?相反,您应该了解[准备好的语句](http://goo.gl/vn8zQ)并使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能决定哪些,[这篇文章](http://goo.gl/3gqF9)会帮助你。如果你选择PDO,[这里是很好的教程](http://goo.gl/vFWnC)。 – 2012-08-12 04:22:36

回答

5

使用此更新的查询

$q_ins="INSERT INTO `TOF_ARTICLES` VALUES ('".$r['ART_ID']."','".$r['ART_ARTICLE_NR']."','".$r['ART_SUP_ID']."','".$r['ART_DES_ID']."','".$r['ART_COMPLETE_DES_ID']."','".$r['ART_CTM']."','".$r['ART_PACK_SELFSERVICE']."','".$r['ART_MATERIAL_MARK']."','".$r['ART_REPLACEMENT']."','".$r['ART_ACCESSORY']."','".$r['ART_BATCH_SIZE1']."','".$r['ART_BATCH_SIZE2']."');"; 
1

试试这个:

$q_ins='INSERT INTO `TOF_ARTICLES` VALUES ("'.$r['ART_ID'].'","'.$r['ART_ARTICLE_NR'].'","'.$r['ART_SUP_ID'].'","'.$r['ART_DES_ID'].'","'.$r['ART_COMPLETE_DES_ID'].'","'.$r['ART_CTM'].'","'.$r['ART_PACK_SELFSERVICE'].'","'.$r['ART_MATERIAL_MARK'].'","'.$r['ART_REPLACEMENT'].'","'.$r['ART_ACCESSORY'].'","'.$r['ART_BATCH_SIZE1'].'","'.$r['ART_BATCH_SIZE2'].'");'; 
1

你的代码将出现有一对多 '' '' S:P

'.$r['ART_COMPLETE_DES_ID'].''更换”。 $ r [“ART_COMPLETE_DES_ID”]。'',所以不会混淆。

这里有一个完整的查询:

mysql_query(" 

INSERT INTO `TOF_ARTICLES` 
(`art_id`, 
`art_article_nr`, 
`art_sup_id`, 
`art_des_id`, 
`art_complete_des_id`, 
`art_ctm`, 
`art_pack_selfservice`, 
`art_material_mark`, 
`art_replcacement`, 
`art_accessory`, 
`art_batch_size1`, 
`art_batch_size2`) 

VALUES (''.$r['ART_ID'].'', 
''.$r['ART_ARTICLE_NR'].'', 
'".$r['ART_SUP_ID']."', 
''.$r['ART_DES_ID'].'', 
''.$r['ART_COMPLETE_DES_ID'].'', 
''.$r['ART_CTM'].'', 
''.$r['ART_PACK_SELFSERVICE'].'', 
''.$r['ART_MATERIAL_MARK'].'', 
''.$r['ART_REPLACEMENT'].'', 
''.$r['ART_ACCESSORY'].'', 
''.$r['ART_BATCH_SIZE1'].'', 
''.$r['ART_BATCH_SIZE2'].''); 
") or die("Error: " . mysql_error()); 
0

这也可能是您的报价。试试这个:

$q_ins = 'INSERT INTO `TOF_ARTICLES` VALUES ('.$r['ART_ID'].', 
              '.$r['ART_ARTICLE_NR'].', 
              '.$r['ART_SUP_ID'].', 
              '.$r['ART_DES_ID'].', 
              '.$r['ART_COMPLETE_DES_ID'].', 
              '.$r['ART_CTM'].', 
              '.$r['ART_PACK_SELFSERVICE'].', 
              '.$r['ART_MATERIAL_MARK'].', 
              '.$r['ART_REPLACEMENT'].', 
              '.$r['ART_ACCESSORY'].', 
              '.$r['ART_BATCH_SIZE1'].', 
              '.$r['ART_BATCH_SIZE2'].')'; 
4

对于初学者,你应该永远永远不要做你正在做的事情。使用非参数化查询是非常危险的。

但要回答你的问题,试试这个。

$q_ins= "INSERT INTO `TOF_ARTICLES` VALUES ('{$r['ART_ID']}','{$r['ART_ARTICLE_NR']}','{$r['ART_SUP_ID']}','{$r['ART_DES_ID']}','{$r['ART_COMPLETE_DES_ID']}','{$r['ART_CTM']}','{$r['ART_PACK_SELFSERVICE']}','{$r['ART_MATERIAL_MARK']}','{$r['ART_REPLACEMENT']}','{$r['ART_ACCESSORY']}','{$r['ART_BATCH_SIZE1']}','{$r['ART_BATCH_SIZE2']}');"; 
1
$q_ins = <<<MySQL 
INSERT INTO `TOF_ARTICLES` 
VALUES (
    {$r["ART_ID"]} 
    ,{$r["ART_ARTICLE_NR"]} 
    ,{$r["ART_SUP_ID"]} 
    ,{$r["ART_DES_ID"]} 
    ,{$r["ART_COMPLETE_DES_ID"]} 
    ,{$r["ART_CTM"]} 
    ,{$r["ART_PACK_SELFSERVICE"]} 
    ,{$r["ART_MATERIAL_MARK"]} 
    ,{$r["ART_REPLACEMENT"]} 
    ,{$r["ART_ACCESSORY"]} 
    ,{$r["ART_BATCH_SIZE1"]} 
    ,{$r["ART_BATCH_SIZE2"]} 
) 
; 
MySQL; 

在那里,是不是更好?