数据库表 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的输出视为变量?
答案 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'
然而,正如其他人所说,这不是一个好主意,特别是对于安全性。