【问题标题】:MySQL query with PHP variables Issues带有 PHP 变量的 MySQL 查询问题
【发布时间】:2014-04-24 02:35:32
【问题描述】:

我已经搜索过类似 stackoverflow 的东西来寻找答案,但似乎没有什么对我有用。我在 /var/log/apache2/error_log 中没有收到任何错误,因此它在语法上似乎是正确的。

我正在制作一个功能页面,该页面将从输入表单中获取数据,并根据用户填写的要更新的内容将其插入数据库。当我在 mysql CLI 上运行查询时,它会很好地更新它,但是当我运行它时它在页面中不起作用。

我设置了多个查询,它们仅根据是否填写信息运行,这里是一个示例,好像用户想要更新他们的名字。

这恰好将人输入的单词转换为 PHP 变量,

$first_name = htmlentities($_POST["first"], ENT_QUOTES);

它还通过以下方式从用户的登录信息中获取用户 ID:

$user_id = $_SESSION['login_info']['user_id'];

然后在此检查实体是否为空,如果不是,则运行查询。

if ($first_name != "") {
    $result = $dbact->interact("UPDATE person SET first_name = ".$first_name." WHERE idperson = ".$user_id, true);
}

$result 存储查询的输出,因为我正在调用我的交互函数,如下所示:

public function interact($query,$resultVal) {
    $db = new mysqli("localhost","username","password","calendar");

    if ($db->connect_errno) {
        echo "Failed to connect to MySQL: (" . $db->connect_errno . ") " . $db->connect_error;
    }

    if(!$db) {
        echo "Error: Could not acces database in mySQL";
        exit;
    }

    //Running the query and returning the result based on $resultVal
    if($resultVal) {
        $result = $db->query($query);

        return $result;
    }

    else {
        $db->query($query);
    }
}

一定是我的语法有问题,我连接有什么问题吗?这可能只是我忽略的东西,但我很想得到意见。

感谢大家的宝贵时间。

【问题讨论】:

  • 使用mysqli 时,您应该使用参数化查询和bind_param 将用户数据添加到您的查询中。 请勿使用字符串连接来完成此操作,因为您在这里创建了一些严重的SQL injection bugs。在这里使用htmlentities 是完全错误的。这仅在您在 HTML 上下文中显示该内容时才相关,例如在页面上。
  • @tadman 我会调查那个先生,谢谢你的提示!

标签: php mysql sql


【解决方案1】:

您的字符串值周围缺少引号:

$result = $dbact->interact("UPDATE person SET first_name = ".$first_name." WHERE idperson = ".$user_id, true);
                                                         ^^^^^^^^^^^^^^^^^^^
                                                                HERE

应该是:

$result = $dbact->interact("UPDATE person SET first_name = '".$first_name."' WHERE idperson = ".$user_id, true);

仅供参考,htmlentities() 确实保护您免受 SQL 注入。您的代码易受攻击。

【讨论】:

  • @John Conde,谢谢你,我想我忽略了最小的事情吧,我希望有一天我不是人类!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多