Php 将值另存为数据库中的变量名

Php 将值另存为数据库中的变量名,php,mysql,variables,Php,Mysql,Variables,数据库表公司信息 ----------------------------- | companyname | companytype | ----------------------------- | Company One | Blah | ----------------------------- | Company Two | Blah2 | ----------------------------- 数据库表发票模板 ---------------------

数据库表公司信息

-----------------------------
| companyname | companytype |
-----------------------------
| Company One | Blah        |
-----------------------------
| Company Two | Blah2       |
-----------------------------
数据库表发票模板

-----------------------------
| Header      | bgcolor     |
-----------------------------
| $company    | Red         |
-----------------------------
| $company    | Biege       |
-----------------------------
PHP文件common_include.PHP

$company = ... //FROM db table company_info field companyname
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
PHP文件invoice.PHP

$company = ... //FROM db table company_info field companyname
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

问题:如何使输出中的$company显示为company one?i、 e如何将MySQL DB的输出作为变量处理?

解决方案将是
eval(“echo$header”)
,尽管您永远不应该求助于此类解决方案。在我看来,您应该将所有与公司相关的数据移动到数据库中

更新 您不应该将
$company
放入数据库中。关系数据库应该是关系数据库。也就是说,主键和外键。然后,应根据数据的关系查找数据。另请参见ORM在这种情况下的工作方式:

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

解决方案将是
eval(“echo$header”)
,尽管您永远不应该求助于此类解决方案。在我看来,您应该将所有与公司相关的数据移动到数据库中

更新 您不应该将
$company
放入数据库中。关系数据库应该是关系数据库。也就是说,主键和外键。然后,应根据数据的关系查找数据。另请参见ORM在这种情况下的工作方式:

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

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

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

如果将
$header
设置为文字字符串值
$company
,并且变量
$company
设置为字符串
company One
,则此操作应有效:

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

但是,正如其他人所说,这不是一个好主意,尤其是对于安全性而言。

如果
$header
设置为文本字符串值
$company
,并且变量
$company
设置为字符串
company One
,则这应该起作用:

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

然而,正如其他人所说,这不是一个好主意,尤其是在安全方面。

谢谢你的回答。我不明白为什么我不该这么做?公司数据在数据库中。该文件仅将其填充到变量中,以便应用程序可以使用include访问它。这有风险吗?请解释。和echo eval($header)可以工作,但在我的设置中不工作。由于该变量和其他变量位于一个变量中,因此用于将发票显示为pdf格式。真正的字符串类似于$pdfcontent=因为我仍然不鼓励您走这条路,它类似于
$company='mycompany'$其中=“$公司”;评估(\$which=$which;);echo$其中我正在考虑重新设计我的数据库/代码,而不是这样做。谢谢你的回答。我不明白为什么我不该这么做?公司数据在数据库中。该文件仅将其填充到变量中,以便应用程序可以使用include访问它。这有风险吗?请解释。和echo eval($header)可以工作,但在我的设置中不工作。由于该变量和其他变量位于一个变量中,因此用于将发票显示为pdf格式。真正的字符串类似于$pdfcontent=因为我仍然不鼓励您走这条路,它类似于
$company='mycompany'$其中=“$公司”;评估(\$which=$which;);echo$其中我正在考虑重新设计我的数据库/代码,而不是这样做。谢谢,谢谢。我可以用一个伪变量替换$company,比如#company,然后用当前的公司名称preg#u replace#company。你也可以使用
$company
,只是不要将它输入
eval()
或类似的邪恶构造。另外,
str_replace()
preg_replace()
做得更快,只要你不需要任何花哨的东西。谢谢。我可以用一个伪变量替换$company,比如#company,然后用当前的公司名称preg#u replace#company。你也可以使用
$company
,只是不要将它输入
eval()
或类似的邪恶构造。另外,
str_replace()
preg_replace()
做得更快,只要你不需要任何花哨的东西。这行
$header=FROM db…
是怎么回事,因为这应该是无效的PHP…@disgludedgoat$header=来自db。。不是有效的php,它只是意味着我正在从数据库中提取数据。行
$header=from db…
的处理方法是什么,因为这应该是无效的php…@disgrudgeoat$header=来自db。。不是有效的php,它只是意味着我从db中提取数据。我同意这个想法也是一个丑陋的想法,它不会像这样$然后,应将标题设置为文本字符串值
company
。否则php会抛出一个通知:“未定义变量$company”。这应该起作用: