duanhong8839 2016-04-25 19:20
浏览 97
已采纳

使用array_keys()进行插入

Inserting an array into the database using this solution Insert array into MySQL database with PHP produces a MySql error.

My code:

// Create arrays and values
        $columns = "`".implode("`, `",array_keys($value))."`";
        $escaped_values = array_map('mysql_real_escape_string', array_values($value));
        $values  = implode("', '", $escaped_values);
        // Print arrays and values
        echo "<br><h4>Columns:</h4> <br>";
        echo $columns;
        echo "<br><h4>Values:</h4><br>";
        echo $values;
        echo "<br><h4>";
        // Insert or update
        $insert = mysql_query("INSERT INTO stocklink2 ($columns) VALUES ('$values') ON DUPLICATE KEY UPDATE ($columns) = ('$values'); ");
        if($insert === FALSE) { 
            die(mysql_errno($link).mysql_error()); // TODO: better error handling
        }
        echo "</h4>";

And the code output:

Columns:

`RecNo`, `Style`, `Upper`, `Split`, `Stocktype`, `Lineno`, `Upper2`,
 `Upper3`, `Upper4`, `Upper5`, `Bottom`, `Price`, `Comments`, `Comments2`, 
`Stocka`, `Stockb`, `Stockc`, `Stockd`, `Stocke`, `Stockf`, `Stockg`, 
`Stockh`, `Stocki`, `Stockj`, `Stockk`, `Stockl`, `Stockm`, `Stockn`, 
`Stocko`, `Resa`, `Resb`, `Resc`, `Resd`, `Rese`, `Resf`, `Resg`, `Resh`, 
`Resi`, `Resj`, `Resk`, `Resl`, `Resm`, `Resn`, `Reso`, `Ordera`, `Orderb`, 
`Orderc`, `Orderd`, `Ordere`, `Orderf`, `Orderg`, `Orderh`, `Orderi`, 
`Orderj`, `Orderk`, `Orderl`, `Orderm`, `Ordern`, `Ordero`, `Availa`, 
`Availb`, `Availc`, `Availd`, `Availe`, `Availf`, `Availg`, `Availh`, 
`Availi`, `Availj`, `Availk`, `Availl`, `Availm`, `Availn`, `Availo`, 
`Currsales`, `Sixmonth`, `Size25s`, `Size30s`, `Size35s`, `Size40s`, 
`Size45s`, `Size50s`, `Size55s`, `Size60s`, `Size65s`, `Size70s`, `Size75s`, 
`Size80s`, `Size85s`, `Size90s`, `Size95s`, `Size100s`, `Size105s`, 
`Size110s`, `Size115s`, `Size120s`, `Size125s`, `Size130s`, `Size135s`,
`Size140s`, `Size145s`, `Size150s`, `Size20c`, `Size25c`, `Size015c`, 
`Size10c`, `Size30c`, `Size35c`, `Size40c`, `Size45c`, `Size50c`, `Size55c`, 
`Size60c`, `Size65c`, `Size70c`, `Size75c`, `Size80c`, `Size85c`, `Size90c`, 
`Size95c`, `Size100c`, `Size105c`, `Size110c`, `Size115c`, `Size120c`, 
`Size125c`, `Size130c`, `Size135c`, `Size140c`, `Size145c`, `Size150c` 
Values:


2', 'BNO5839 ', 'CCA ', '8', ' ', '0', ' ', ' ', ' ', ' ', 'BO ', '120', ' 
', ' ', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 
'0', '0', '159', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 
'0', '0', '-328', '-2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 
'0', '0', '0', '-418', '-4', '0', '0', '0', '0', '0', '0', '0', '0', '0', 
'0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 
'0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 
'0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 
'0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 
'0 1064You have an error in your SQL syntax; check the manual that 
corresponds to your MariaDB server version for the right syntax to use near 
'(`RecNo`, `Style`, `Upper`, `Split`, `Stocktype`, `Lineno`, `Upper2`, 
`Upper3`, ' at line 1

The column "Upper" is a reserved word, so I have to escape the column names. This worked when I was updating a single field, but does not work with the array of fields.

  • 写回答

1条回答 默认 最新

  • doupo2633 2016-04-25 19:30
    关注

    This is wrong:

    ON DUPLICATE KEY UPDATE ($columns) = ('$values'); ");
                              ^^^^^^^^^^^^^^^^^^^^^
    

    You're building

    on duplicate key update (field, field, field, etc..) = (value, value value, ...)
    

    You can NOT update/assign values in parallel like that. You have to do individual

    on duplicate key update field1=value1, field2=value2, etc...
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?