我在保持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