Я ужасно плохо держу запросы 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)"
В запросе:
- ИД пользователя и запросы являются целыми числами
- Ссылка и категория - это Tiny Text (не уверен, что это уместно, но максимум 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);
и добавление escape-символов в других местах кода.