加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – mysql REPLACE INTO表有数百列

发布时间:2020-12-13 17:01:37 所属栏目:PHP教程 来源:网络整理
导读:我有一张包含数百列的表格.表结构不受我的控制(由第三方控制).该表还有可怕的字段名称,包括空格,单引号等,表值也是如此.该表每小时通过cron更新一次. cron作业每次都会截断并重建表.我还保留了该表的归档表,我使用REPLACE INTO语句根据需要更新或插入. 我的
我有一张包含数百列的表格.表结构不受我的控制(由第三方控制).该表还有可怕的字段名称,包括空格,单引号等,表值也是如此.该表每小时通过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)');

}

解决方法

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

“Aha! Erroneous single quotes on the mysql_query statement was the culprit. I also did mysql_real_escape_string on $values and used single quotes instead of ticks. Worked like a charm. Thank you! Final answer: – Tavish”

在查询上使用mysql_error().您发布的内容似乎是合法代码,但是值需要引用’和escaped可能注入,而不是勾选.
使用双引号“为第二个查询的封装.

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

以及给出的其他建议.

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

while ($listing = mysql_fetch_assoc($listings)){ 
    $fields = array_keys($listing); 
    $fields = implode(',',$fields); 
    $fields = "$fields"; 
    $values = array_values($listing); 
    $values = implode(",",$values); 
    $values = mysql_real_escape_string($values); 
    $values = str_replace("`","'",$values); 
    $values = "'$values'"; 
    mysql_query("REPLACE INTO archive.table ($fields) VALUES ($values)"); 
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读