带有PHP变量的MySQL查询问题

带有PHP变量的MySQL查询问题,php,mysql,sql,Php,Mysql,Sql,我已经搜遍了像stackoverflow这样的人,寻找答案,但似乎什么都不适合我。我在/var/log/apache2/error\u日志中没有发现任何错误,因此它在语法上似乎是正确的 我正在制作一个功能页面,它将从输入表单中获取数据,并根据用户填写的内容将其插入数据库中进行更新。当我在mysql CLI上运行查询时,它会很好地更新它,但当我运行它时,它在页面中无法工作 我设置了多个查询,它们只根据信息是否已填写来运行,下面是一个示例,好像用户想要更新他们的名字 在顶部,这恰好将用户输入的单词转

我已经搜遍了像stackoverflow这样的人,寻找答案,但似乎什么都不适合我。我在/var/log/apache2/error\u日志中没有发现任何错误,因此它在语法上似乎是正确的

我正在制作一个功能页面,它将从输入表单中获取数据,并根据用户填写的内容将其插入数据库中进行更新。当我在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存储查询的输出,因为我调用的是interact函数,如下所示:

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);
    }
}
一定是我的语法有问题,我连接错了吗?这可能只是我忽略了一些事情,但我很想得到一些意见


感谢大家抽出时间。

字符串值周围缺少引号:

$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注入的影响。您的代码易受攻击。

使用
mysqli
时,您应该使用参数化查询,并将用户数据添加到查询中。不要使用字符串连接来实现这一点,因为您在这里创建了一些严重的错误。在这里使用
htmlentities
是完全错误的。只有当您在HTML上下文中显示该内容时,例如在页面上,才与此相关。@tadman先生,我将对此进行研究,谢谢您的提示@约翰·康德,谢谢你,我想我忽略了最微小的事情,对吧,我希望有一天我不是人类!