mysql REPLACE INTO表有数百列

时间:2016-10-12 13:37:38

标签: php mysql

我有一张包含数百列的表格。表结构不受我的控制(由第三方控制)。该表还有可怕的字段名称,包括空格,单引号等,表值也是如此。该表每小时通过cron更新一次。 cron作业每次都会截断并重建表。我还保留了该表的归档表,我使用REPLACE INTO语句根据需要更新或插入。

我的挑战 - 我不想明确定义所有350个字段名称和值,并且在我的REPLACE INTO语句中再次这样做,因为这将花费很长时间并且如果表更改则需要维护。我宁愿使用数组。这是什么不起作用,但希望给出一个目标的想法(我意识到这是被弃用的MySQL,但它是由于各种原因它是什么):

$listings = mysql_query("SELECT * FROM current.table");

while ($listing = mysql_fetch_assoc($listings)){

    //prepare variables

    $fields = array_keys($listing);
    $fields = implode('`, `', $fields);
    $fields = "`$fields`";

    $values = array_values($listing);
    $values = implode("`, `", $values);
    $values = "`$values`";

    mysql_query('REPLACE INTO archive.table ($fields) VALUES ($values)');

}

1 个答案:

答案 0 :(得分:3)

作为社区维基发布,不应该有代表,因为它确实解决了OP的问题(根据评论中的建议)。

  

"啊哈! mysql_query语句中的错误单引号是罪魁祸首。我还对$ values执行了mysql_real_escape_string,并使用单引号而不是ticks。工作就像一个魅力。谢谢!最后的答案: - Tavish"

对查询使用mysql_error()。您发布的内容似乎是合法代码,但是值可能需要引用options(error=)escaped以进行可能的注入,而不是勾选。 使用双引号 var RnR = (from m in DataContext.csrcallds where m.scheduledon >= earliestDate && m.scheduledon <= objdate1.DateStart && m.assignto == 113 && (DataContext.fn_WorkDays((DateTime)m.scheduledon, (DateTime)m.completedon)) > 5 group m by new { m.scheduledon.Value.Year, m.scheduledon.Value.Month } into p orderby p.Key.Year ascending, p.Key.Month ascending select new Date1() { theDate = DateTime.Parse($"{p.Key.Month} - {p.Key.Year}"), theCount = p.Count(), theString = $"{p.Key.Month} - {p.Key.Year}" }); 进行第二次查询的封装。

'

以及其他建议。

OP的最终代码(摘自评论):

"