我在PHP / MySQL Web应用程序中有一个简单页面,允许管理员用户编辑HTML模板电子邮件(存储在数据库中)。基本上,要编辑模板,用户键入文本区域并提交一个回发到同一页面的表单。
提交表单时,会调用一个PHP函数,通过对MySQL存储函数的参数化查询来更新数据库中的记录。
最后,从数据库中检索记录,并在页面上显示信息 - 第一次显示页面时也会发生此步骤。
我遇到的问题是,虽然在检索显示之前数据库中的记录正在更新,但页面仍然会在更新之前显示旧数据。页面上的其他内容,例如标题更新成功 DO 更新的横幅消息,因此我认为这不是浏览器缓存问题。添加行:sleep(1);在记录更新解决问题后,页面显示更新的记录,但出于性能原因,这不是理想的,我不明白为什么这个问题首先发生。
以下是页面顶部的PHP代码:
require_once('includes/global.php');
require_once('includes/emailtemplateutils.php');
$strMsg = '';
$lngEmailTemplatePK = ConvertToString($_GET['key'], 0);
if (ConvertToString($_POST['hdnSave']) == '1')
{
$strFromAddress = ConvertToString($_POST['txtFromAddress']);
$strSubjectLine = ConvertToString($_POST['txtSubjectLine']);
$strBodyHTML = ConvertToString($_POST['txtBodyHTML']);
if (EmailTemplate_Update($lngEmailTemplatePK, $strFromAddress, $strSubjectLine, $strBodyHTML))
{
$strMsg = FormatMsg('E-mail template updated.');
}
else
{
$strMsg = FormatErrorMsg('Could not save e-mail template!');
}
}
$objEmailTemplate = EmailTemplate_Display($lngEmailTemplatePK);
这是实际进行更新的EmailTemplate_Update()函数的代码:
function EmailTemplate_Update($lngEmailTemplatePK, $strFromAddress, $strSubjectLine, $strBodyHTML)
{
$objConn = new mysqli(cstrGlobal_DbServer, cstrGlobal_DbUsername, cstrGlobal_DbPassword, cstrGlobal_DbCatalog);
if (mysqli_connect_errno())
{
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$strQuery = "SELECT srf_EmailTemplate_Update(?, ?, ?, ?)";
$objStmt = $objConn->prepare($strQuery);
$objStmt->bind_param('isss', $lngEmailTemplatePK, EmptyToNull($strFromAddress), EmptyToNull($strSubjectLine), EmptyToNull($strBodyHTML));
$objStmt->execute();
$objStmt->bind_result($lngRetVal);
$objStmt->fetch();
$objStmt->close();
$objConn->close();
return $lngRetVal == 1;
}
检索显示记录的功能有点复杂,但基本上只是使用mysqli fetch_object()
将记录作为对象返回请帮忙。
答案 0 :(得分:0)
希望您将使用engine = innodb,以便您可以使用交易:
try
{
$conn = new mysqli("localhost", "foo_dbo", "pass", "foo_db", 3306);
$conn->autocommit(FALSE); // start transaction
do CRUD work...
$conn->commit();
}
catch(exception $ex)
{
$conn->rollback();
}
答案 1 :(得分:0)
我最终设法解决了这个问题,虽然不是我想要的方式。在我尝试升级MySQL和PHP之后,由于各种依赖性问题,我设法破坏了服务器上的Linux安装。我最终不得不从头开始重建服务器。
我原始问题中的代码现在按预期工作。我怀疑问题可能是InnoDB设置行在原始MySQL安装的my.cnf文件中被注释掉了。