Php Drupal 6将数组存储在mysql表中,因为varchar是错误,提供的参数无效
我制作了一个mysql表,存储问题及其Drupal 6属性,如前缀、后缀、选项、标题、值、类型。。。等等 不幸的是,存储的选项值是一个数组,我得到一个错误“警告:为foreach()提供的参数无效” 代码是:Php Drupal 6将数组存储在mysql表中,因为varchar是错误,提供的参数无效,php,mysql,drupal,drupal-6,varchar,Php,Mysql,Drupal,Drupal 6,Varchar,我制作了一个mysql表,存储问题及其Drupal 6属性,如前缀、后缀、选项、标题、值、类型。。。等等 不幸的是,存储的选项值是一个数组,我得到一个错误“警告:为foreach()提供的参数无效” 代码是: $fruit = db_query("SELECT type,title, value, section, collapsible,collapsed, description, options, size, prefix, suffix, default_value FROM {tabl
$fruit = db_query("SELECT type,title, value, section, collapsible,collapsed, description, options, size, prefix, suffix, default_value FROM {table} ");
$count = 1;
while($slice = db_fetch_array($fruit)){
$section = $slice['section'];
$op = $slice['options'];
$form[$count] = array(
'#type' => $slice['type'],
'#title' => $slice['title'],
'#collapsible' => $slice['collapsible'],
'#collapsed' => $slice['collapsed'],
'#description' => $slice['description'],
'#options' => $op,
'#size' => $slice['size'],
'#prefix' => $slice['prefix'],
'#suffix' => $slice['suffix'],
);
$count = $count+1;
}
在一种特殊情况下,选择是
array(t('yes'), t('no'))
其中类型为“收音机”这就是存储为varchar的内容(blob也不起作用)(添加逗号也没有帮助。您不能像MySQL中那样存储数组。您可能希望将其保存为序列化字符串(
serialize($options)
),然后取消序列化($slice['options'))
在您的表单中。不要将数组序列化为字符串。这是人们在数据库中存储列表时经常犯的错误之一(尽管公平地说,这比为前n个项目创建固定数量的列要好)
我将创建一个单独的选项
表,其中每行有两列:(问题id,选项)
,其中问题id
是问题表中的外键。查询如下:
SELECT option FROM options WHERE question_id = <<$id>>;
编辑:为什么不将数组序列化为字符串?
这不是我深入研究过的东西,但在我脑海中我可以想到性能、便利性和理论:
保存数据的代码在哪里?您是否也增加了
$count
变量?否则您将只得到一个值。是的,我只是显示了问题区域。如果您认为这会增加值,我将添加它!保存数据并不是问题的一部分,因此我不会添加它。这是提交的一部分,而不是表单处理的一部分明确地写出了我的问题是什么。我已经有了一个函数形式。问题是选项值,就像我在问题中所说的那样。谢谢,我将尝试这个并报告:)当然,如果我手动输入表,这是有效的,而不是最佳选项。虽然,当我有这么多不同的选项时,创建一个选项表也是一件麻烦事。谢谢所以在这个特殊的情况下,我会有一个至少包含以下内容的表:r1:caseA,no;r2:caseA,是的。为什么要连载一个问题?
SELECT option FROM options WHERE question_id = <<$id>> SORT BY rank ASCENDING;