我遇到了一个问题,因为columns
的名称不正确,所以无法将数据插入到table
中。它们只是列1、列2等。而不是日期、地址、城市等。我没有设计这个数据库,也没有办法改变这些表的制作方式,所以我决定在下面的第一个row
中insert
columns
的名称。现在我有了一段相应的数据来将它们连接在一起。因此,现在我将所有列名的array
和row
1中所有值的array
组合为一个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到column67。
所以我的问题是我该怎么做?
此外,如果有更简单的方法来完成所有这些我洗耳恭听。这是一个糟糕的解决方案,但这是迄今为止我能想到的最好的解决方案。
编辑
我的总体目标似乎有很多困惑。这是可以理解的,因为这种数据库设计很糟糕,而且是一个复杂的问题。列名实际上就是问题的价值所在。下面的一排就是这些问题的答案。所以最终这就是我的目标。我会有一个Associative Array
,看起来像这个
column1 => Date
column2 => Address
column3 => City
...
这样,我就可以编写一个INSERT,将06-22-2013
(Date的答案)插入到column1
中,因为column1 => Date
。
如果需要更多的解释,我会补充。
首先,切换到PDO或MySQLi,请参阅此处的大警告;这是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 |
+------------+-------+
每次使用,使用后清除。column_id
可以是1,2,3…带有AUTO_INCREMENT
只需执行常规INSERT,将null
指定为第一个值,即可使id列自动正确递增。
列名已经在数组中了。
$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'];
}
}
http://www.php.net/manual/en/book.pdo.php
http://uk1.php.net/manual/en/mysqlinfo.api.choosing.php