php - (PHP & mySQL) 将行视为列

标签 php mysql row entity-attribute-value

我正在开发基于 PHP 和 mySQL 的网站。我正在尝试在管理面板中设置“设置”页面,我可以在其中输入不同的设置来管理网站。根据要求,设置范围可达 100(或更多)。因此,我不想制作 100 列(如果我将来必须添加更多列,则增加),我想以行格式存储数据并获取值,就好像我从列中获取它一样。

引用:

我在最流行的博客工具“Wordpress”中发现了此类功能的类似现实生活实现。作为引用,它是我正在谈论的'wp_options'表。(请纠正我我错了)

示例:

这是一个简单的例子,说明我正在尝试这样做(以及为什么):

--Table settings

P.KEY   option_name      option_value
1       site_name        XYZ site inc.
2       siteurl          http://www.xyz.com
3       slogan           Welcome to my XYZ site
4       admin_email      admin@xyz.com
5       mailserver_url   mail.xyz.com
6       mailserver_port  23
..... etc.

从上面可以看出,我列出的选项很少,而且数量还在增加。 (仅作记录,我安装的 Wordpress 在 wp_options 表中有 902 行,我没有看到任何重复的 option_name)。所以我觉得如果我应用与Wordpress相同的工作原理来适应设置的增长,我会过得很好。我还想这样做,以便在将所有设置保存在数据库中后,我想检索所有设置并填充表单中的相应字段,这些字段的条目存在于数据库中。

我的代码试验之一:

--
-- Table structure for table `settings`
--

CREATE TABLE IF NOT EXISTS `settings` (
  `set_id` tinyint(3) NOT NULL auto_increment,
  `option_name` varchar(255) NOT NULL,
  `option_value` varchar(255) NOT NULL,
  PRIMARY KEY  (`set_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Dumping data for table `settings`
--

INSERT INTO `settings` (`set_id`, `option_name`, `option_value`) VALUES
(1, 'site_name', 'XYZ site inc.'),
(2, 'slogan', 'Welcome to my XYZ site');

$result = mysql_query("SELECT option_name, option_value FROM settings");
$defaults = array('option_name', 'option_value');


while( list($n, $v) = mysql_fetch_array($result) )
{
 $defaults['option_name'] .= $n;
 $defaults['option_value'] .= $v;
}

echo  $defaults['option_name'].'---'.$defaults['option_value'].'<br />';

//The above code gives me the following Output:
//site_nameslogan---XYZ site inc.Welcome to my XYZ site

当我运行上面的查询时,我还收到了 2 个 PHP 通知,上面写着:

未定义索引:option_name

未定义索引:option_value

我将不胜感激任何可以向我显示 PHP 代码 以成功检索选项并消除未定义索引问题的回复。另外,正如我之前提到的,我想在存储数据后下次访问设置页面时检索所有现有设置并填充表单中的相应字段。

提前感谢大家。

最佳答案

PHP 向您发出警告,因为 $defaults['option_name']$defaults['option_value'] 在用于 之前未被初始化。 = 操作。

所以就放

$defaults['option_name'] = '';
$defaults['option_value'] = '';

在循环和警告消失之前。

其余代码是完全正确的,尽管您根本不需要 set_id 列,因为每个设置都有唯一的名称,该名称(option_name列)可以用作主键。

您可以改进代码的另一件事是,以不同的方式使用 $defaults,就像这样

$defaults[$n] = $v;

然后您可以单独使用每个设置,而无需查看两个巨大的字符串。

$site_url = $defaults['site_url'];
foreach ($defaults as $name => $value) {
   echo $name, ' = ', $value, '<br>';
}

关于php - (PHP & mySQL) 将行视为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1997670/

相关文章:

php - Codeigniter JOIN 多个表

php - 如何从连接在局域网上的另一台电脑上使用存储在一台电脑上的数据库

javascript - 仅在登录时显示我的加载屏幕

php - 获取 Div 的宽度并根据元素数量限制 mySQL 查询?

php - 制作家具布置工具,需要一些建议

sql - 外键不会阻止我输入数据 MySQL

html - 容器内的一组左浮动的固定宽度 div - 奇怪的行为(不规则地中断到下一行?)

javascript - node.js:循环,通过电子邮件发送查询中的每个匹配行,但它通过 # 匹配数向同一用户发送电子邮件?

mysql - 我如何从MYSQL获取ID

php - Composer : prevent updating packages that require higher PHP version