我遇到了无法将数据插入table
的问题,因为columns
未正确命名。它们只是column1,column2等。而不是Date,Address,City等。我没有设计这个数据库,我没办法改变这些表的编写方式所以我决定insert
这些名字在他们下面的第一个columns
中的row
。现在我有一个相应的数据将它们链接在一起。现在,我正在制作所有列名称的array
,以及array
1中所有值的row
,因此我可以将它们合并为一个associative array
。我稍后会将其用作插入语句的键。
这可能令人困惑所以这就是我的table
看起来像
id | column1 | column2 | column3
1 | Date | Address | City
然而,下次它可能有更多列,名称不同,所以看起来像这样
id | column1 | column2 | column3 | column4 | column5
1 | Apple | Orange | Tomato | Pear | Banana
现在,这是我用来尝试创建Associative Array
的代码:
$col_keys = array();
$col_values = array();
$columns = "SELECT column_name FROM information_schema.columns WHERE table_name = 'mytablename'";
$columns_info = "SELECT * FROM 'mytablename' WHERE 'id' = '1'";
if ($query_run11 = mysql_query($columns)) {
if (mysql_num_rows($query_run11) == NULL) {
$response["success"] = 0;
echo $response;
} else {
while ($row = mysql_fetch_assoc($query_run11)) {
$col_keys['key_name'] = $row['column_name'];
}
}
}
if ($query_run12 = mysql_query($columns_info)) {
if (mysql_num_rows($query_run12) == NULL) {
$response["success"] = 0;
echo $response;
} else {
while ($row = mysql_fetch_assoc($query_run12)) {
$col_values['value_name'] = $row['column_name']; // PROBLEM
}
}
}
$final = array_combine($col_keys, $col_values);
//echo '<pre>'; print_r($final); echo '</pre>
如代码中所述,以下行是一个问题。
$col_values['value_name'] = $row['column_name'];
这是一个问题,因为'column_name'
不是列的名称。显然,这是开始的整个问题,没有办法知道列名是什么。它可以是column1 - 第67列。
所以我的问题是我该怎么做?
此外,如果有更简单的方法 所有这些 ,我会全力以赴。这是一个糟糕的解决方案,但它是迄今为止我能想到的最好的解决方案。
修改
我的整体目标似乎有很多混乱。这是可以理解的,因为这个数据库设计很糟糕,而且是一个复杂的问题。列名实际上是问题的值。它们下面的行是这些问题的答案。所以最终这是我的目标。我将有Associative Array
看起来像这样
column1 => Date
column2 => Address
column3 => City
...
这样我可以编写一个INSERT,将06-22-2013
(日期的答案)插入column1
,因为column1 => Date
。
如果需要更多解释,我将添加此内容。
答案 0 :(得分:1)
列名已经在数组中。
$sql = "SELECT * FROM 'mytablename' WHERE 'id' = '1'";
$query = mysql_query($sql);
if (mysql_num_rows($query) == NULL)
{
echo 0;
}
else
{
while ($row = mysql_fetch_assoc($query)) {
$id=$row['id'];
// you build your out in here.
$id[$id]=$id;
$date[$id]=$row['column1'];
$address[$id]=$row['column2'];
$city[$id]=$row['column3'];
}
}
答案 1 :(得分:1)
只需执行常规INSERT,将null
指定为第一个值,以便id列自动正确递增。
答案 2 :(得分:1)
首先,切换到PDO或MySQLi,请参阅大警告here;这是PDO代码:
$dbh = new PDO('mysql:host=localhost;dbname=my_name', $user, $pass);
$stmt = $dbh->query($columns_info);
$result = $stmt->fetch();
$col_values = $result;
之后你可以将它们组合起来:
$final = array_combine($col_keys, $col_values);
但是将不同类型的数据插入同一列......看起来像是一个问题。只需填充一个单独的表,如:
+------------+-------+
| column_id | name |
+------------+-------+
每次,并在使用后清除它。使用AUTO_INCREMENT
,column_id
可能是1,2,3 ....