我在保持 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)"
在查询中:
- Userid 和 requests 是整数
- 链接和类别是小文本(不确定这是否合适,但最大为 255 个字符,那么 VarChar 会更好吗?)
- 日期是日期(用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;
}
}
我刚刚找到一门让小型项目的生活变得更简单的课程,并坚持使用它。现在,我遇到的问题是$this->mysqli->real_escape_string($SQL);
在代码的其他地方删除和添加转义。