我需要弄清楚在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
所以现在我有一些参考需要插入的值。现在接下来的步骤将是。
总而言之,如果没有正确的信息,我无法将答案插入到代表问题的正确列中。我个人认为更改PHP
中的列名称将是更好的选择。但是我对PHP
和SQL
很新,所以我甚至不知道这是否可行。任何帮助表示赞赏
修改
稍微更好地了解我发布的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>'
答案 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);