我有一个执行以下操作的页面:
- 点击按钮提交表单
- 页面发布到自身,并执行 SQL 查询以更新数据库中的字段。
- 然后代码检查查询执行中是否有任何受影响的行,并进行回显。我希望它能够回显受影响的行“1”
在 Firefox、Safari 和 Chrome 中,此操作每次都有效。但在 IE9 中,它第一次工作,可能是 2 次甚至 3 次,然后它做了一些奇怪的事情 -它回显受影响的行“0” -即使查询执行得很好(数据库已更新)。
我相信这是某种缓存问题,因为当我在第 1 步(提交表单)之前清除 IE 中的浏览器缓存时,它每次都可以按需要工作。
我试过使用这段代码:
header('Cache-Control: no-cache, no-store, must-revalidate'); // HTTP 1.1.
header('Pragma: no-cache'); // HTTP 1.0.
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
这在<head>
标签中:
<meta http-equiv="Cache-Control" content="no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="Mon, 26 Jul 1997 05:00:00 GMT" />
到底是怎么回事?我怎样才能阻止 IE 像这样播放?
更新:
PHP PDO 的 rowCount() 似乎存在某种不一致(用于获取受影响的行)......在我的情况下,我无法想象如何,但这种不一致与浏览器缓存有关。在执行我的查询后,我没有使用 rowCount(),而是执行了一个 SELECT 来确定该字段是否已使用新的 val 进行了更新。这似乎一直在工作。