处理预先存在的程序,该程序解析具有动态创建的字段数的html表单,并且为了向前兼容,可能甚至不知道mysql列的数量......
我想这需要创建两个数组,并进行某种比较/重新排序,但不能完全绕过它......
这会是这样的:
A)数据库阵列 - 1)获取MySQL列的# 2)循环遍历此数字并获取MySQL列名称
B)表格阵列 - 1)获取表单字段数 2)获取表单字段名称/值
C)匹配阵列 - 将name.form_field [f]与name.mysql_column [c]
匹配D)执行插入 - 将name.form_field [f]的值插入name.mysql_column [c] (INSERT INTO name.mysql_column [c],name.mysql_column [c + 2],name.mysql_column [c + 5],name.mysql_column [c + n] VALUES value(name.form_field [f]),value(name .form_field [f + 9]),值(name.form_field [f + 3]),值(name.form_field [f + x]))
我猜测答案就像上面那样,但是不能完全描绘实现结果所需的嵌套循环......
有什么可能的解决方案让人想到吗?
所有回复都非常赞赏!
谢谢,
Sean McKernanMcK66 Productions
答案 0 :(得分:3)
这需要更长的答案,但我会试着中途介绍。
我建议从另一个方向解决问题。理想情况下,代码将拥有自己要插入的字段列表,然后查看提交的数据以构造相关的行。这也让它具有“缺失”列的默认值,因此它总是可以生成具有正确数量的字段的行数据。
有一个令人沮丧的大量PHP,它使用提交的字段名来构建SQL,而不是从已知的字段名列表开始。根据我的经验,程序员这样做是因为他们控制生成的表单,但忘记他们并不真正控制提交的表单。所需要的只是在FireBug中进行一些编辑,你可以将页面敲六,这可能会破坏你的数据库。
答案 1 :(得分:0)
我不确定这是否完全适合您的情况,但我们使用类似于以下的内容来处理数据查询,我们不确定我们是否可以完全控制。表单输入名称与列名称匹配,因此如果您没有,则需要提供正确的映射。
这将从表中检索列数据,然后仅使用与表中存在的列匹配的元素从表单数据构建查询。
DB()是我们围绕MDB2的包装器。
$db = new DB();
$sql = 'DESCRIBE `table`';
$result = $db->query($sql);
$row = array();
$query = array();
while ($row = $result->fetchRow())
{
if (array_key_exists($row['field'], $form_data))
if (is_null($form_data[$row['field']]))
$query[$row['field']] = 'NULL';
else
$query[$row['field']] = $db->quote($form_data[$row['field']]);
}
$keys = array_keys($query);
foreach ($keys as &$key)
$key = $db->quoteIdentifier($key);
unset($key);
$vals = array_values($query);
$sql = 'INSERT INTO `table` '
. '(' . implode(', ', $keys) . ') '
. 'VALUES(' . implode(', ', $vals) . ')';