将值保存为数据库中的变量名称

时间:2010-09-21 09:18:48

标签: php mysql variables

数据库表 company_info

-----------------------------
| companyname | companytype |
-----------------------------
| Company One | Blah        |
-----------------------------
| Company Two | Blah2       |
-----------------------------

数据库表 invoice_template

-----------------------------
| Header      | bgcolor     |
-----------------------------
| $company    | Red         |
-----------------------------
| $company    | Biege       |
-----------------------------

PHP文件 common_include.php

$company = ... //FROM db table company_info field companyname

PHP文件 invoice.php

include('common_include.php');
$header = ... //FROM db table invoice_template field header
echo "Header is ". $header;
echo "<br/>Company is ". $company; //$company is defined in common_include.php

invoice.php的输出,当公司登录时为例如公司

Header is $company
Company is Company One

问题:如何让输出中的$ company显示为Company one?即如何将MySQL DB的输出视为变量?

3 个答案:

答案 0 :(得分:2)

解决方案将是eval("echo $header"),尽管您永远不应该诉诸此类解决方案。您应该 - 我认为 - 将所有公司相关数据移动到数据库中。

<强>更新 您不应该将$company放入数据库中。关系数据库应该是关系。这意味着,主键和外键。然后应该通过它的关系查找数据。另请参阅ORM在这种情况下如何工作:

echo $invoice_template->getCompany()->getName();

答案 1 :(得分:1)

你不想这样做。您只是打开了太多混合代码和数据的潜在漏洞 - 想象一下当攻击者获得对数据库的访问权时(直接或通过SQL注入)会发生什么情况并将各种疯狂的PHP代码放入该列中?只使用这样的漏洞,攻击者就可以接管整个服务器。 你想要的可能是一个适当的数据库结构的组合,使用连接一次查询相关信息,可能是一个简单的文本搜索和替换(使用str_replace或甚至preg_replace)用实际数据填充文本模板。

答案 2 :(得分:1)

如果$header设置为文字字符串值$company而变量$company设置为字符串Company One,那么这应该有效:

echo "Header is ". $$header; // outputs 'Header is Company One'

然而,正如其他人所说,这不是一个好主意,特别是对于安全性。