我在保持MySQL查询直线时非常糟糕,但除此之外,我有一个查询可用于某些数据输入,但不是全部。我的猜测是引号在应该出现的位置被转义。转义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)"
查询:
- 用户名和请求是整数
- 链接和类别的小文本(不知道这是适当的,但最多为255字符,那么VarChar会更好?)
- 日期是一个日期(是否更好重新格式化与PHP或重新格式化与MySQL?)
- 引用是文本字段
任何想法?
感谢
编辑: 回答这个问题被张贴四次有abouts其中,问题是我逃避整个查询。
什么是遗漏的,并造成一些混淆的代码围绕查询。 正是这样
$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);
并在代码中的其他地方添加转义。
你可以给出具体的案例,它的工作原理和失败的地方?我看到你用mysql-real-escape-string标记了你的问题,但是根本没有看到你使用它,它可能只是你的问题的答案。 – lanzz
您是否尝试过'echo'或'var_dump'这个字符串,看看它是什么样子?请花点时间熟悉这一点:http://en.wikipedia.org/wiki/SQL_injection – Quasdunk
建议使用mysql_error()记录失败的查询,并尝试插入数据并从中找出原因模式和错误消息.... – optimusprime619