Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.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
Php 从DB和会话中重复获取映像路径的优点和缺点_Php_Html_Mysql_Session - Fatal编程技术网

Php 从DB和会话中重复获取映像路径的优点和缺点

Php 从DB和会话中重复获取映像路径的优点和缺点,php,html,mysql,session,Php,Html,Mysql,Session,目前,我使用如下会话显示配置文件图像: <img src="<?php if (isset($_SESSION['userimage'])){ echo $_SESSION['userimage']; }?>" /> <img src="<?php echo $row['userimage'] ?>"/> function showUserImage($url = null) { if (!isset($url)) {

目前,我使用如下会话显示配置文件图像:

<img src="<?php if (isset($_SESSION['userimage'])){
echo $_SESSION['userimage']; }?>" />
<img src="<?php echo $row['userimage'] ?>"/>
function showUserImage($url = null) {
    if (!isset($url)) {
        $url = 'standarduserpic.png';
    }
    echo '<img src="' . $url . '">';
}
“/>
像这样直接从MySQL获取它们的好处和坏处是什么:

<img src="<?php if (isset($_SESSION['userimage'])){
echo $_SESSION['userimage']; }?>" />
<img src="<?php echo $row['userimage'] ?>"/>
function showUserImage($url = null) {
    if (!isset($url)) {
        $url = 'standarduserpic.png';
    }
    echo '<img src="' . $url . '">';
}
“/>

它对性能有影响吗?我看到很多程序员选择显示会话中的用户名来迎接登录的用户,而不是从数据库中获取用户名。

我假设,数据库中有一个指向图像的文件路径,还需要获取一次才能进入会话

如果您不需要数据库中的任何内容,至少不需要此用户的任何内容,则应将所有内容存储在会话中

如果您仍然需要连接到数据库,特别是从用户行获取数据,那么应该使用第二种方法

这取决于用例及其成本。尝试一点基准测试

还可以考虑一个好的缓存机制。它可以带来更多的优化,然后在这里

我也会有这样的东西:

<img src="<?php if (isset($_SESSION['userimage'])){
echo $_SESSION['userimage']; }?>" />
<img src="<?php echo $row['userimage'] ?>"/>
function showUserImage($url = null) {
    if (!isset($url)) {
        $url = 'standarduserpic.png';
    }
    echo '<img src="' . $url . '">';
}
函数showUserImage($url=null){ 如果(!isset($url)){ $url='standarduserpic.png'; } 回声'; }
如果在生成每个页面时从数据库获取路径,则会增加数据库和应用程序之间的通信量。如果数据库位于另一台服务器上,则需要一些时间,甚至可能需要一些带宽

如果只从数据库中提取一次并将其存储在会话中,则不存在此开销。但是,如果路径发生更改(例如,当用户更改其配置文件图像时),则必须刷新会话中的值。维护会话和DB之间的一致性可能需要一些努力——在更改路径时,您需要同时更新DB和会话变量(或者为尚未创建映像的用户创建新映像)。请注意,在更新或使用会话变量之前,必须调用
session\u start()

我个人会选择只从数据库中获取一次值,并将其缓存在会话中。如果还没有加载,我会在
session_start()
之后立即从数据库加载路径,这样我就不需要在生成HTML时测试正在设置的会话变量

<?php
…
session_start();
if (!isset($_SESSION['userimage'])) {
    $_SESSION['userimage'] = loadUserImageFromDB();
}
…
?>
…
<img src="<?php echo $_SESSION['userimage'];?>"/>
…

…
"/>
…

您是否已将图像存储在db中?”/>@OnlyMAJ no我在Folder中的一个文件中输入了文件路径directlyget from session每次提取都比较好。