【问题标题】:Having trouble with UPDATEUPDATE 遇到问题
【发布时间】:2013-11-24 00:24:15
【问题描述】:

我试图制作一个报告系统并且需要更新一些值,但是每次我尝试做某事时似乎都会给我这个错误,我使用的是 mysql 和 php:

解析错误:语法错误,意外 '' (T_ENCAPSED_AND_WHITESPACE),在第 22 行的 C:\xampp\htdocs\core\functions\offtopic.php 中需要标识符 (T_STRING) 或变量 (T_VARIABLE) 或数字 (T_NUM_STRING)

代码如下:

if (isset($_GET['report']))
{
    $query = "UPDATE `offtopicposts` SET `reported`='1', `reported_by`=$_SESSION['user_id'] WHERE `post_id` = $_GET['report']";
    mysql_query($query) or die(mysql_error());
}

【问题讨论】:

  • $_SESSION['user_id'] 设置了吗?你很容易受到SQL injections的攻击!
  • 我正在检查是否设置了 $_GET['report'],如果未设置该会话变量,页面将重定向它们
  • 你确定这是第 22 行吗?听起来您可能在第 22 行之前的任何内容上都缺少分号...
  • 我把它从一个文件中取出来了,"$query = "UPDATE offtopicposts SET reported='1', reported_by=$_SESSION['user_id'] WHERE post_id = $_GET['报告']";"是第 22 行。

标签: php mysql


【解决方案1】:

你试过了吗:

$query = "UPDATE `offtopicposts` SET `reported`='1', `reported_by`={$_SESSION['user_id']} WHERE `post_id` = {$_GET['report']}";

花括号可以解决问题。

或者,您可以像这样连接字符串:

$query = "UPDATE `offtopicposts` SET `reported`='1', `reported_by`=" . 
         $_SESSION['user_id'] . " WHERE `post_id` = " .
         (int)$_GET['report'];

这还允许您潜入 int 强制转换,这是一种使该脚本更好地防止 SQL 注入的肮脏但有效的方法。更好的办法是完全放弃已弃用的 mysql 函数,切换到 mysqliPDO,并使用准备好的语句。

【讨论】:

  • 修复了它。感谢您的帮助!
  • 不能再接受 5 分钟...并且没有足够的声誉来投票... :-/
【解决方案2】:

你可以这样做;

$query = "UPDATE `offtopicposts` SET `reported`='1', `reported_by`=".$_SESSION['user_id']." WHERE `post_id` = ".$_GET['report'];

或者这个

$user_id = $_SESSION['user_id'];
$report = $_GET['report'];
$query = "UPDATE `offtopicposts` SET `reported`='1', `reported_by`=$user_id WHERE `post_id` = $report";  

【讨论】:

    猜你喜欢
    • 2014-11-30
    • 2021-08-09
    • 2017-05-02
    • 2021-02-01
    • 2012-10-31
    • 2019-07-26
    • 2018-01-07
    • 2016-06-11
    • 1970-01-01
    相关资源
    最近更新 更多