gpt4 book ai didi

php - 逃避 MySQL 查询问题

转载 作者:行者123 更新时间:2023-11-29 09:02:52 26 4
gpt4 key购买 nike

我在保持 MySQL 查询的直接性方面非常糟糕,但除此之外,我还有一个查询用于某些数据输入,但不是全部。我的猜测是引号在它们应该在的地方被转义了。

我同时转义了整个查询字符串。这是不好的做法还是真的很重要?

这是查询:

"INSERT INTO bio_manager_pubs(userid,category,citation,date,link,requests) VALUES ( ".     
$userid.",'".
$_POST['category']."', '".
htmlentities($_POST['pub'])."',
FROM_UNIXTIME(".strtotime($_POST['date'])."),'".
$_POST['link']."',
0)"

查询中:

  • 用户 ID 和请求都是整数
  • 链接和类别是小文本(不确定这是否合适,但最大为 255 个字符,所以 VarChar 会更好吗?)
  • Date就是日期(用php重新格式化好还是用mysql重新格式化好?)
  • 引文是一个文本字段

有什么想法吗?

谢谢

编辑:这个问题的答案已经发布了四次,问题是我逃避了整个查询。

被遗漏并引起一些困惑的是围绕查询的代码。原来是这样的

$db->query($query)

这是函数查询的位置:

public function query($SQL)
{
$this->SQL = $this->mysqli->real_escape_string($SQL);
$this->result = $this->mysqli->query($SQL);

if ($this->result == true)
{
return true;
}
else
{
printf("<b>Problem with SQL:</b> %s\n", $this->SQL);
exit;
}
}

我刚刚找到了一个类(class),可以让小型项目的生活变得更简单,并坚持下去。现在,我遇到的问题是删除 $this->mysqli->real_escape_string($SQL); 并在代码中的其他位置添加转义符。

最佳答案

我确实没有看到对您的 $_POST 数据进行任何清理,并且在插入数据库之前确实不需要运行 htmlentities,这应该在您获取该数据并将其显示在页面上时完成。一定要清理你的帖子!!使用 mysql_real_escape_string() 或最好使用带有准备好的语句的 PDO。

如果您在构建整个查询后运行 mysql_real_escape_string(),那么这就是破坏它的原因。

在各个帖子上使用它,和/或将只能是数字的变量转换为整数。

根据您的情况,我会将其更改为:

$posted = $_POST;

foreach($posted as &$value)
$value = mysql_real_escape_string($value);

$date = strtotime($posted['date']);


$q = "INSERT INTO bio_manager_pubs(userid,category,citation,date,link,requests) VALUES
(
'{$userid}',
'{$posted['category']}',
'{$posted['pub'])}',
FROM_UNIXTIME({$posted['date']}),
'{$posted['link']}',
'0'
)";

关于php - 逃避 MySQL 查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8054753/

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