gpt4 book ai didi

php - mysql REPLACE INTO 表有数百列

转载 作者:可可西里 更新时间:2023-11-01 07:34:17 25 4
gpt4 key购买 nike

我有一个包含数百列的表格。表结构不在我的控制范围内(由第三方控制)。该表还有可怕的字段名称,其中包含空格、单引号等,表值也是如此。该表通过 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)');

}

最佳答案

作为社区 Wiki 发布,不应有代表来自此,因为它确实解决了 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对于可能的注入(inject),未勾选。而使用双引号 " 进行第二个查询的封装。

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)");
}

关于php - mysql REPLACE INTO 表有数百列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40000121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com