好的,昨晚我问了一个问题并收到了一些非常好的回复。由于这是我第一次使用StackOverflow,我真的很高兴。
我希望你们可以帮助一个新的。希望在未来的路上,我能够回报一些新手的新宠。
我在php文件中有以下代码:
$sql = "";
$now=date("Y-m-d h:i:s");
$updatedRecords = $json1->{'updatedRecords'};
foreach ($updatedRecords as $value){
$sql = "update `acea` set ".
"`ACEA_A1`='".$value->ACEA_A1 . "', ".
"`ACEA_A2`='".$value->ACEA_A2 . "', ".
"`ACEA_A3`='".$value->ACEA_A3 . "', ".
"`ACEA_A4`='".$value->ACEA_A4 . "', ".
"`ACEA_A5`='".$value->ACEA_A5 . "', ".
"`ACEA_B1`='".$value->ACEA_B1 . "', ".
"`ACEA_B2`='".$value->ACEA_B2 . "', ".
"`ACEA_B3`='".$value->ACEA_B3 . "', ".
"`ACEA_B4`='".$value->ACEA_B4 . "', ".
"`ACEA_B5`='".$value->ACEA_B5 . "', ".
"`ACEA_E1`='".$value->ACEA_E1 . "', ".
"`ACEA_E2`='".$value->ACEA_E2 . "', ".
"`ACEA_E3`='".$value->ACEA_E3 . "', ".
"`ACEA_E4`='".$value->ACEA_E4 . "', ".
"`ACEA_E5`='".$value->ACEA_E5 . "', ".
"`ACEA_E7`='".$value->ACEA_E7 . "' ".
"where `acea_id`=".$value->acea_id;
if(mysql_query($sql)==FALSE){
$errors .= mysql_error();
}
}
“ACEA_XX”部分与“acea”数据库表中的列(显然)相关,但程序员静态地设置它们。不幸的是,需要定期添加这些列,并创建与引入的新ACEA规范相关的新列。
因此,此代码已过时。
每次添加新列时都不必进入并更新此代码,如何重新设计此代码以便动态更新以包含新列?我整个上午都在尝试使其工作,我可以设置它以便我可以动态地将实际的列名插入到update语句中,但是,我似乎无法动态地动态获取关联的值(我认为我抓取和插入列名的方法有点复杂。
我的实际数据库表列目前是:
acea_id ACEA_A1 ACEA_A2 ACEA_A3 ACEA_A4 ACEA_A5 ACEA_B1 ACEA_B2 ACEA_B3 ACEA_B4 ACEA_B5 ACEA_E1 ACEA_E2 ACEA_E3 ACEA_E4 ACEA_E5 ACEA_E6 ACEA_E7 ACEA_E9 oil_data_id
第一列和最后一列永远不会改变,并将继续作为第一列和最后一列。任何新列都将添加到介于两者之间,但不一定紧接在“oil_data_id”列之前。
为了正确获取值,我尝试了多种方式修改代码,但却无法使其正常工作。
任何人都对代码进行了简洁的修改,以实现我的目标吗?非常感谢。
答案 0 :(得分:0)
首先,我强烈建议将其放入一个单独的表格中(如果愿意的话,将数据转向“横向”)。假设这不可行:
$sql = "";
$updatedRecords = $json1->{'updatedRecords'};
foreach ($updatedRecords as $values){
$flist = array();
$params = array();
foreach ($values as $key => $value) {
if (preg_match('/^ACEA_[A-Z]+\d+$/', $key)) {
$flist[] = $key .'="%s"';
$params[] = mysql_real_escape_string($value);
}
}
$sql = "update `acea` set ". implode(', ', $flist) .
"WHERE `acea_id`='%s'";
$params[] = mysql_real_escape_string($value->acea_id);
$sql = sprintf($sql, $params);
if(mysql_query($sql)==FALSE){
$errors .= mysql_error();
}
}
答案 1 :(得分:0)
看起来像Doug Kress的方法吐出一些错误所以这是我的镜头:
$errors = array();
foreach($json1->updatedRecords as $record)
{
$fields = array();
foreach($record as $field => $value)
{
if(substr($field, 0, 5) === 'ACEA_')
{
$fields[] = $field.' = '.mysql_real_escape_string($value);
}
}
// Check if there are any fields set to be updated.
if(isset($fields[0]))
{
// I'm assuming $record->acea_id is an integer. If not,
// replace '%d' with '%s'.
$sql = "UPDATE `acea` SET %s WHERE `acea_id` = '%d';";
$sql = sprintf($sql, implode(',', $fields), $record->acea_id);
if(mysql_query($sql) === false)
{
$errors[] = mysql_error();
}
}
}