【发布时间】: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 我会调查那个先生,谢谢你的提示!