【问题标题】:MySQL database trying to update info but not appearing on websiteMySQL 数据库尝试更新信息但未出现在网站上
【发布时间】:2016-01-15 04:51:08
【问题描述】:

我在 Symfony 中有一个链接到 MySQL 数据库的网站。网站出现了一些问题,所以我必须更新数据库中的信息。问题是,当我更新数据库时,它会在那里保持更新,但在网站上它没有显示任何更改。

例如,用户已注册。我去数据库更改电子邮件,这样我就可以用相同的电子邮件注册另一个帐户。数据库已使用新电子邮件进行更新,但网站上显示旧电子邮件仍在使用中。

我知道我正在更新正确的数据库,因为当我在网站上注册新客户时,它会出现在数据库中。关于为什么会发生这种情况的任何想法?

【问题讨论】:

  • 缓存或者你更新了错误的数据库:)
  • 如果您使用的是FOSUserBundle,请确保更新emailemail_canonical
  • 抱歉,有无数种可能性。如果您在此处需要任何帮助,您只需向我们提供更多信息。你在使用教义吗?或者可能使用 PDO 访问数据库?您是否使用任何 3rd 方捆绑包进行用户管理?哪个?这在开发环境和生产环境中是否可以重现?当您说“我已经清除了缓存”时,您是否清除了服务器应用程序的缓存?还是您的浏览器缓存
  • @HPierce 我们正在使用 Doctrine。在文件目录上,还有 Propel 插件和 Protocolous 插件。我清除了浏览器缓存...

标签: php mysql symfony


【解决方案1】:

一开始我在使用我的主机服务器提供的 mysql 数据库时遇到了问题,但后来我在我的主机服务器内的 softaculus 中安装了最新的 mysql 数据库版本,然后我能够在 softaculus 内或直接通过 url 访问 mysql (www .mypage.com/mysql)。最后它完美地工作。你可以尝试做类似的事情。

【讨论】:

  • 由于使用了 cPanel,据我所知,我们必须使用与 cPanel 相同版本的 mySQL。所以我们不能在没有 cPanel 先做的情况下更新它
【解决方案2】:

如果您的 Symfony 应用程序没有显示更新的数据库记录,那是因为它正在使用仍然包含旧数据的缓存。这通常是 Symfony 的问题,刷新页面只是从缓存中重新加载。尝试先清除缓存。现在,很多时候 cache:clear 在命令行中不起作用,我一直都在发生这种情况,但从来没有真正理解过为什么。答案是删除所有缓存文件,按照 Fabien Potencier 的提示:http://fabien.potencier.org/a-symfony-tip-clear-the-cache-without-the-command-line.html。这很有效,是我的首选解决方案,例如; composer update 之后没有清除缓存。事实上,我养成了在进行 composer install 或 update 之前删除我的开发机器上的缓存文件的习惯。

【讨论】:

  • 应用程序由 cPanel 托管。我是在文件管理器中删除缓存文件还是在 WHM 中删除它们?
  • 直接进入 app/cache 文件夹并使用任何可以让您访问这些文件的工具删除所有文件。如果 cPanel 为您提供文件管理员,请使用它。
  • 但是很奇怪,因为我只是从根目录的/cache文件夹中删除了缓存(我之前下载了一个备份)。然后我从数据库中删除了一个用户并尝试使用同一个电子邮件再次注册,它仍然说电子邮件存在:/所以我猜它没有做任何事情......
  • 您是否真的删除了该行或只是将其标记为已删除?另外,您使用的是 fos 用户包吗?
【解决方案3】:

就像 Angel Iliikov 在 cmets 中提到的那样,这很可能是缓存问题。以下建议假设您可以访问命令行——典型的 Symfony 用户应该这样做。如果您还没有,大多数托管服务提供商都允许您获得SSH 访问权限。

清除以下缓存:

1. Symfony 的缓存

Symfony 将在缓存文件中存储大量数据,以防止它不得不从头开始处理请求。当 Symfony 应用程序出现问题时,一个非常常见的解决方法是清除此缓存并重试。清除此缓存的标准方法是在项目的根目录中运行控制台命令:

$ app/console cache:clear

如果您遇到问题,David Soussan answer 会提供有关此问题的更多信息。

2。教义的缓存

根据another question 上的评论者(由我格式化):

原则缓存通常存储在 apc 中而不是文件中 系统因此删除缓存文件无济于事。一般的app/console cache:clear 仅用于 symfony (app) 缓存。我认为它不会清除学说缓存。

-caponica

替代 PHP 缓存 (APC) 是在 php.ini 中启用的可选组件。如果恰好启用了 Doctrine,它也可能在那里缓存信息。

previously mentioned question 上接受的答案提供了清除 Doctrine 缓存的答案:

 $ app/console doctrine:cache:clear-metadata 
 $ app/console doctrine:cache:clear-query  
 $ app/console doctrine:cache:clear-result

-amitchhajer

3.您的浏览器缓存

这不太可能导致任何问题。但是,如果您正在通过 HTTP 发送缓存标头 - 应用程序可能正确更新数据,但您的浏览器显示的是旧页面。

每个浏览器都有不同的清除缓存的方式。 Google 为how to do it Chrome 提供支持。 Mozilla 为how do it in Firefox 提供支持。


如果清除缓存不能解决您的问题,则可能是您的应用程序或工作流程存在问题,需要进行调试。您可以尝试以下几点:

  1. 确保您确实更新了正确数据库。确认这一点 在两个单独的数据库客户端上。

  2. Create your own Symfony command 您唯一要做的事情就是查询数据库。如果它返回正确的结果,您应该检查其他组件是否正在使用相同的查询。如果没有,请检查您的配置/参数以确保您使用的是正确的数据库。

【讨论】:

  • 谢谢。从技术上讲,我确实可以访问 SSH,但我现在似乎无法连接到它......我正在尝试解决这个问题,然后尝试您的解决方案。
  • 是的,问题出在缓存上。由于这个答案更完整和详细,我会奖励你代表 :) 谢谢
【解决方案4】:

亚当,

使用这些命令清除缓存:

# dev environment
$ app/console cache:clear

# production environment
$ app/console cache:clear --env=prod

【讨论】:

    猜你喜欢
    • 2021-10-13
    • 1970-01-01
    • 2022-11-26
    • 2017-09-28
    • 2017-05-29
    • 2012-05-22
    • 2017-01-16
    • 2021-01-25
    • 1970-01-01
    相关资源
    最近更新 更多