我有一张包含数百列的表格。表结构不受我的控制(由第三方控制)。该表还有可怕的字段名称,包括空格,单引号等,表值也是如此。该表每小时通过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)');
}
答案 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的最终代码(摘自评论):
"