gpt4 book ai didi

php - 获取查询时出现问题

转载 作者:行者123 更新时间:2023-11-29 11:20:51 25 4
gpt4 key购买 nike

如果警报字段被隐藏,我会尝试显示一条消息,然后更新该字段,以便该消息无法再次显示。数据库中的值正在更新,但消息仍然显示,任何人都可以帮助我找出问题所在。

<?php 
$alrt="hidden";
$checkalert=mysql_query("SELECT * FROM user_shift_test WHERE userid='$_SESSION[userid]' AND alert='$alrt' ");
if(!empty($checkalert)){
$updatealert=mysql_query("UPDATE user_shift_test SET alert='showed' WHERE userid='$_SESSION[userid]' ");
?>
<div class="alert" style="margin:10px;">
Your shift is swapped.
</div><?php } ?>

最佳答案

您的代码存在几个问题:

  • 您使用了已弃用的 mysql_ 函数:这些函数在过去 3 年中没有得到维护,并且在 PHP 7.xx 中不存在。您应该移至 mysqli_PDO
  • 您可以在 SQL 语句中注入(inject)字符串。这可能会使您容易受到 SQL 注入(inject)的攻击。请改用准备好的语句;
  • 即使结果集为空,测试 !empty($checkalert) 也始终为 true。它是一个查询对象。这就是消息不断显示的原因(顺便说一句:不显示);
  • 获取和设置操作可以更好地在一个 SQL 操作中完成,这将为您提供更好的性能。条件更新后,您可以检查记录是否已更新,如果是,则显示消息;

这是您首先需要移动到 mysqli_ 函数的代码(也用于连接):

<?php
// Perform update only if value is hidden
$stmt = mysqli_prepare($con,
"UPDATE user_shift_test
SET alert = 'shown'
WHERE userid = ?
AND coalesce(alert, 'hidden') = 'hidden' ");
if ($stmt) {
// pass session variable as argument
mysqli_stmt_bind_param($stmt, "s", $_SESSION['userid']);
mysqli_stmt_execute($stmt);
// check if any update was performed
if (mysqli_stmt_affected_rows($stmt)) {
?>
<div class="alert" style="margin:10px;">
Your shift is swapped.
</div>
<?php
}
}
?>

关于php - 获取查询时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38955349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com