【问题标题】:query for or change column name in php?在 php 中查询或更改列名?
【发布时间】:2013-06-22 17:49:41
【问题描述】:

我需要想办法在PHP 中为SQL db 准备一个插入语句,但我无法理解逻辑。插入语句将来自我在JSON 中收到的数据。 JSON 包含问题和答案。我将它们插入的表是问题所在。在前端(网站),表格有代表问题的列名,看起来像这样。

Date | Address | City | Zip

现在问题出在数据库中,这些名称没有保留。列名只是 column1 column 2 等。所以它看起来像这样

Column1 | Column2 | Column3 | Column4

另一件事 - 当每个像这样的表被创建时,它会有不同的值,所以我不能硬编码关系。此外,这些表是通过从前端(网站)导入 excel 电子表格创建的。所以我想出了一个复制电子表格第 1 行和第 2 行的计划,这样当你导入它们时,数据库看起来像这样

id | Column1 | Column2 | Column3 | Column4
 1 |   Date  | Address |   City  |   Zip

所以现在我对需要插入的值有一些参考。现在所涉及的下一步将是。

  1. 根据第 1 行中的数据查询列名将列名更改为第 1 行中的数据。
  2. 根据查询将数据插入正确的列

因此,总而言之,如果没有正确的信息,我无法将答案插入代表问题的正确列中。我个人认为更改PHP 中的列名会是更好的选择。但是我对PHPSQL 还是很陌生,所以我什至不知道这是否可能。任何帮助表示赞赏

编辑

为了更好地理解我目前发布的PHP 的问题。

$json = safe($_POST['assessment']);
/*
$json = 
'{
  "info":
  [
    "Date: 6-22-13",
    "Phone #: (555) 555-5555",
    "Address: 304 N. SCOTTSDALE RD.",
    "City: SCOTTSDALE",
    "Zip: 85251",
    "State: AZ"        
   ]
}';
*/
$data = json_decode($json,true);
$collection = array();

foreach($data['info'] as $piece) {
   $info = explode(':', $piece);
   $collection[] = array('question' => $info[0], 'answer' => $info[1]); 
}
echo '<pre>'; print_r($collection); echo '</pre>'

【问题讨论】:

  • 通常具有像“column1...column2...etc”这样的任意列名是非常糟糕的做法。我建议重命名它们。但是数据......数据是通过与字段标签混合而来的?
  • 带有包含列信息的额外数据的 JSON 是什么样的?
  • @Raythe 我完全同意,我没有设计网站或数据库,我只是在处理它。这一切都是为了与我构建的 Android 应用程序进行通信。第二部分“数据与字段标签混合在一起?”答案是肯定的。这个 db imo 是一场灾难。这只是我在设计这个软件时遇到的许多问题中的最新一个。这是我的第一次,这也无济于事
  • @Barmar 发布了JSON 的示例。 JSON 的“问题”部分与列名应该是什么以及它在网站上的显示方式完全匹配。如果你的意思是别的,请解释
  • 您写道,您将复制第 1 行和第 2 行,以提供 Column1Date 之间的对应关系。你发布的 JSON 在哪里?

标签: php mysql sql json


【解决方案1】:

下面应该创建一个关联数组,将列名映射到数据库架构中的列号:

$stmt = $db->prepare('select Column1, Column2, Column3, ... from table where id = 1');
$result = $stmt->execute();
$data = $result->fetch(PDO::FETCH_ASSOC);
$col_map = array_flip($data);

然后,您可以在准备未来的数据库查询时使用它。

如果您不知道可以拥有多少列,您可以这样做:

$stmt = $db->prepare('select * from table where id = 1');
$result = $stmt->execute();
$data = $result->fetch(PDO::FETCH_ASSOC);
unset($data['id']); // Remove the `id` column, which doesn't conform to the ColumnN pattern
$col_map = array_flip($data);

【讨论】:

  • 我对这个很陌生,所以大部分都是有道理的。但是,如果我不知道我将拥有多少列,这仍然有效吗?还是我需要以某种方式在其中包含for loop
  • 添加一个不需要对列名列表进行硬编码的解决方案。
猜你喜欢
  • 1970-01-01
  • 2017-12-13
  • 2013-02-05
  • 1970-01-01
  • 2022-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多