0

我有一个执行以下操作的页面:

  1. 点击按钮提交表单
  2. 页面发布到自身,并执行 SQL 查询以更新数据库中的字段。
  3. 然后代码检查查询执行中是否有任何受影响的行,并进行回显。我希望它能够回显受影响的行“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 进行了更新。这似乎一直在工作。

4

1 回答 1

0

执行查询后,不要使用 PDO 的 rowCount(),而是执行 SELECT 查询以确定该字段是否已使用新 val 进行了更新。

伪代码/SQL:

  1. 更新表集字段 = '新值' where field = '旧值'
  2. 从表中选择行,其中字段 = '新值'
  3. 如果返回行,则该字段已更新
于 2013-03-04T10:58:29.713 回答