在php中查询或更改列名?

时间:2013-06-22 17:49:41

标签: php mysql sql json

我需要弄清楚在PHP中为SQL数据库准备插入语句的方法,并且我无法理解逻辑。 insert语句将来自我在JSON中收到的数据。 JSON包含问题和答案。我插入的表是问题所在。在前端(网站),该表具有代表问题的列名称,它看起来像这样。

Date | Address | City | Zip

现在问题在于数据库中这些名称没有结转。列名只是column1第2列等。所以它看起来像这个

Column1 | Column2 | Column3 | Column4

另一件事 - 当创建这样的每个表时,它将具有不同的值,因此我无法对关系进行硬编码。这些表也是通过从前端(网站)导入excel电子表格而创建的。所以我想出了一个复制第1行和第1行的计划。电子表格中的2,以便现在当您导入它们时,数据库看起来像这样

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

所以现在我有一些参考需要插入的值。现在接下来的步骤将是。

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

    总而言之,如果没有正确的信息,我无法将答案插入到代表问题的正确列中。我个人认为更改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>'
    

1 个答案:

答案 0 :(得分: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);