【问题标题】:Mysql results as PHP named variablesMysql 结果为 PHP 命名变量
【发布时间】:2021-03-04 22:20:29
【问题描述】:

我在 mysql 中有一个名为 site_settings 的表,看起来像这样

Table in PHPMyAdmin

我正在尝试将我所有的网站设置存储在 mysql 中,并希望将它们作为变量拉入 PHP。

我想从 variable_name 列中提取所有值作为 PHP 中的 $variable 名称,并将它们的值设置为 variable_type 列中的值。

$site_name = 烦恼

$registration_enabled = 假

这是我的代码:

$sql = connect($database_address, $database_username, $database_password, $database);

$query = "SELECT * FROM site_settings";
$result = $sql->query($query);
//$row = $result->fetch_all(MYSQLI_ASSOC);

while($row = $result->fetch_assoc())
{
  $$row['variable_name'] = $row["variable_type"];
}

$arr = get_defined_vars();
print_r($arr);

我用来查看变量是否已创建的最后两行,但我无法让它工作。到目前为止我得到的最好结果是

    [Array] => Array
        (
            [variable_name] => Vexed
        )

谁能告诉我哪里出错了?

提前感谢任何可以提供帮助的人。

【问题讨论】:

  • 我建议不要这样做,因为您可以很容易地破坏现有变量。您必须确保永远不会创建与任何使用中的变量名称相同的设置。最好将它们读入 $config 数组或 stdClass 或类似的实例。

标签: php mysql


【解决方案1】:
【解决方案2】:

我认为正在发生的事情是,当您调用 $$arr['variable_name'] 时,它实际上是先执行 $$arr(在字符串转换后计算为 $Array),然后尝试将 ['variable_name'] 键分配给$数组。

我希望这个小修改可以工作:

$sql = connect($database_address, $database_username, $database_password, $database);

$query = "SELECT * FROM site_settings";
$result = $sql->query($query);
//$row = $result->fetch_all(MYSQLI_ASSOC);

while($row = $result->fetch_assoc())
{
  $name = $row['variable_name'];
  $$name = $row["variable_type"];
}

$arr = get_defined_vars();
print_r($arr);

编辑:我也会回应,以这种方式动态创建变量有点奇怪,它会使你的代码难以遵循。

【讨论】:

  • 非常感谢您的帮助,同意这有点奇怪,我正在创建一个站点,我可以在其中检查和监控不同的网络应用程序,以监控一个站点中的所有内容,我需要存储很多值,我的Mysql 技能比我的 php 更敏锐,因此走我的路线,有没有更好的方法来存储值?我正在尝试创建尽可能开放的网站,以便我可以与他人共享,或者在不同的项目中使用网站的基础。
  • 我可能会将所有内容都放入一个查找字典/数组中,如下所示: $settings = array(); while($row = $result->fetch_assoc()) { $settings[$row['variable_name']] = $row['variable_value'];然后稍后在代码中,您可以通过 $variables 数组访问所有内容。例如$settings['site_name'] = 烦恼,$settings['registration_enabled'] = true 等等。
  • 你会在哪里写这些数据?
  • 我不确定您所说的“写入”数据是什么意思?长期持久存储仍将在数据库中,短期内存中的所有设置都将通过 $settings 字典访问。
  • 对不起,是的,我的意思是长期持久存储,所以存储在数据库中很好,但我担心的是把它们调用到 php 中,我是否可以在推荐的方式上找到一些示例存储站点值?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-17
  • 1970-01-01
  • 2016-04-28
相关资源
最近更新 更多