Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以将字符串存储到mySQL中的一个字段中吗?我可以在PHP中回显该字段,该字段也声明变量?_Php_Mysql_String_Variables_Echo - Fatal编程技术网

我可以将字符串存储到mySQL中的一个字段中吗?我可以在PHP中回显该字段,该字段也声明变量?

我可以将字符串存储到mySQL中的一个字段中吗?我可以在PHP中回显该字段,该字段也声明变量?,php,mysql,string,variables,echo,Php,Mysql,String,Variables,Echo,我有一个.php页面,其中包含变量,每个变量都与几十个不同的搜索条件相关联。我认为将所有变量作为一个巨大的字符串塞进数据库是最容易的 然后,我认为将变量和它们的声明作为一个巨大的字符串塞满会更容易 所以我的意思是,不仅仅是这个: Stewie 101 Green 相反,我希望将此作为数据库中的一个大blob: $user_name = 'Stewie'; $pants_size = '101'; $favorite_eggs = 'Green'; 这样,我就能够非常轻松地捕获和提取大量用户偏

我有一个.php页面,其中包含变量,每个变量都与几十个不同的搜索条件相关联。我认为将所有变量作为一个巨大的字符串塞进数据库是最容易的

然后,我认为将变量和它们的声明作为一个巨大的字符串塞满会更容易

所以我的意思是,不仅仅是这个:

Stewie
101
Green
相反,我希望将此作为数据库中的一个大blob:

$user_name = 'Stewie';
$pants_size = '101';
$favorite_eggs = 'Green';
这样,我就能够非常轻松地捕获和提取大量用户偏好数据,而不必以数组的方式做太多工作。毕竟,我必须经常更改页面,以至于更改数组会让人头疼

如果我能做到这一点,我可以简单地,它将能够简单地一次重新声明所有变量,我就不必再考虑它了

这些记录不需要是可搜索的,只需要使用变量声明(比如$var='value',带有引号和all)即可提取

到目前为止,我调查的情况如下:

  • 一个javascript选项。是的,我知道可以用javascript做一些复杂的事情,但它比我的“一个大变量,我想响应,但神奇地也在”方法中声明变量要复杂得多。如果我这样做,我还不如做数组
  • 数组选项。这涉及到.php中的intlode/explode内容,我担心在太长时间之前我将不得不选择它。然而,如果可能的话,我宁愿用我设想的一步方法来做
  • “将每个变量分别存储在数据库中自己的字段中”选项。这太可怕了,因为字段的更改(并添加到)频率太高,会让我抓狂。我宁愿选择数组选项,因为这只是一些用户的小偏好
任何帮助都将不胜感激,即使是告诉我,“这是不可能的。我推荐[XYZ]”

谢谢


编辑:dave e在下面有一个很好的解决方案,可以通过eval检索这些数据。但我仍然有点困惑,如何将这些数据输入数据库。同样轻松地存储>100个变量及其声明($variable_name='value')有点令人费解

我认为如果您想做类似的事情,您应该将所有pref存储到一个数组中,并将该数组存储到db中。看一看
序列化

你应该看一下PHP eval(),它可以将DB中的文本转换成文本PHP。但是,如果使用不当,您将面临许多潜在的安全问题

例如:

$code = get_whatever_from_DB();

$code = "
$user_name = 'Stewie';
$pants_size = '101';
$favorite_eggs = 'Green';
";

eval('?>' . $code . '<?');
$code=get_whatever_from_DB();
$code=”
$user_name='Stewie';
$pants_size='101';
$favorite_鸡蛋=‘绿色’;
";
eval(“?>”.$code.试试这个:

$data = array();
$data['user_name'] = 'Stewie';
$data['pants_size'] = '101';
$data['favorite_eggs'] = 'Green';
$one_big_string = serialize($data);
// store $one_big_string in your database.

$one_big_string_from_db // <= string from db
extract(unserialize($one_big_string_from_db));
// All array keys will become local variables.
$data=array();
$data['user_name']='Stewie';
$data['pants_size']='101';
$data['favorite_eggs']='Green';
$one_big_string=序列化($data);
//在数据库中存储$one\u big\u字符串。

$one_big_string_from_db/提供如下选项:

$option_array['user_name'] = 'Stewie';
$option_array['pants_size'] = '101';
使用serialize存储数据

$stored_string = serialize($option_array);
当您从db返回数据时,请取消序列化它
$option\u aray=unserialize($option\u array);


对用户数据使用如下数组:

$USER['name'] = 'Stewie';
$USER['size'] = 101;
$USER['eggs'] = 'Green';
然后:

以及取回:

$q = mysql_query('SELECT data FROM users WHERE id='.$uid);
if($r=mysql_fetch_object($q)) $USER = unserialize($r->data);
else echo 'Error no such user id: '. $uid;
使用来自的评论

使用此稍微调整的功能

/**
* @desc   works out the variables in the current scope(from where function was 
*         called).  Returns a serialized version of an array with variable name
*         as key and vaiable value as value
* @param  $varList: variables returned by get_defined_vars() in desired scope.
*         $excludeList: variables to be excluded from the list.
* @return string
*/
    function get_refined_vars($varList, $excludeList) {
        $temp1 = array_values(array_diff(array_keys($varList), $excludeList));
        $temp2 = array();
        while (list($key, $value) = each($temp1)) {
            global $$value;
            $temp2[$value] = $$value;
        }
        return serialize($temp2);
    }
然后创建排除列表数组

$excludeList = array('GLOBALS', '_FILES', '_COOKIE', '_POST', '_GET', 'excludeList');
定义你的变量

    $user_name = 'Stewie';
    $pants_size = '101';
    $favorite_eggs = 'Green';
现在将所有定义变量放入一个序列化字符串中

    //get all variables defined in current scope
    $varList = get_defined_vars();
    // refine the list, serialized.
    $storeThis = get_refined_vars($varList, $excludeList);
将$storeThis值存储在mysql表中

当您从mysql中获取字符串时

    extract(unserialize($someStringFromDatabaseResult));

    echo $user_name;
    echo $pants_size;
    echo $favorite_eggs'

我使用JSON格式在我的一个项目中存储设置,效果非常好。 下面是我使用JSON的课程:

<?php

/**
* Settings getter and setter
*/
class Settings
{
  private $settings;
  function __construct($rawSettings)
  {
    $this->settings = json_decode($rawSettings);
  }

  // returns the serialized settings object, so we can save it someware
  protected function Serialized()
  {
    return json_encode($this->settings);
  }

  // return the setting, or null if it is not set
  public function Get($setting)
  {
    if (isset($this->settings->$setting)) return $this->settings->$setting;
    else return null;
  }

  public function Set($setting, $value)
  {
    $this->settings->$setting = $value;
  }
}


?>
使用Set方法设置新值

$settings->Set('name','Stewie');
$settings->Set('pant_size','101');
$settings->Set('favorite_eggs','Green');
使用Get方法获取值

echo $settings->Get('name');
当存储到DB时,只需使用$settings->Serialized()


现在,设置是以一种并非PHP独有的格式存储的,也许有一天会是一件好事,谁知道呢。

好吧,到目前为止,我最喜欢这个选项。检索一大堆似乎每天都在变化的东西(我指的是它的结构每天都在变化)变得非常简单。我正在试图找出是否可以用相同的或类似的方式存储这些东西——只需在边缘添加几个标记。这可能吗?(感谢您提供的替代方案!数组对于如此庞大且多变的琐事来说将是一个非常头疼的问题。)我最终不得不将此作为我的解决方案。尽管它确实有效,但花了整整12个小时才将$date['0000u和'1u变量']全部放入一个数组。遗憾的是,这是12个小时的时间(似乎没有必要)首先我试图避免的工作。如果可以的话,正如我在帖子编辑中所说的,我会选择dave e的eval解决方案:它几乎不需要任何工作。在我看来,这个解决方案是所有与数组相关的解决方案中编写得最好的,因为代码在第一次尝试时就工作了。我非常感谢您的回复,ipsum,因为这就是我想要的非常有用!非常感谢。@Jerry Rowe:那么你应该把这个设置为你接受的答案。
$settings->Set('name','Stewie');
$settings->Set('pant_size','101');
$settings->Set('favorite_eggs','Green');
echo $settings->Get('name');