Я экранирую сообщения в блоге с помощью sqlite_escape_string () и подключаюсь к базе данных, используя старый объектно-ориентированный способ.
(Да, я знаю, я должен использовать PDO, я вернусь к этому позже; преобразование этого скрипта займет довольно много времени.)
Когда у меня есть такие данные как: It's raining cats and dogs!
, он сохраняет это в базу данных: It''s raining cats and dogs!
.Проблема в том, что он выходит из базы данных таким образом, и stripslashes () не отменяет его.Магические кавычки отключены.
Каждый раз, когда я вспоминаю эти данные из базы данных и сохраняю их снова, они добавляют новые одинарные кавычки.Как бы мне помешать этому?
Вот сокращенный код отправки:
# Grab the data from form and escape the text
$title = sqlite_escape_string(strip_tags($_POST['title']));
$text = sqlite_escape_string($_POST['text']);
# Query for previous data
$result = @$dbh->query("SELECT * FROM posts WHERE id=".$id);
# Fetch previous data
while($past = $result->fetchObject()) {
$ptitle = $past->title;
$ptext = $past->post;
}
# Set a base query to modify
$base = "UPDATE posts SET ";
# Run through scenarios
if(stripslashes($ptitle) !== $title) { $base .= "title='".sqlite_escape_string($title)."', "; }
if(stripslashes($ptext) !== $text) { $base .= "text='".sqlite_escape_string($text)."', "; }
}
# Remove last comma & space
$base = substr($base, 0, -2);
$base .= " WHERE id=".(int)$id;
# Execute modified query
@$dbh->query($base);
А вот код, который считывает данные обратно:
# Sanitize and set variables
$start = (int)$start;
$limit = (int)$limit;
$start = ($start - 1) * $limit;
$dbh = $this->dbh;
$this->limit = $limit;
# Query the database for post data
$this->result = $dbh->query("SELECT * FROM posts ORDER BY id desc LIMIT ".$start.", ".$limit);
public function loop() {
# Do we have any posts?
if(!empty($this->result)) {
# Convert query results into something usable
$this->cur_result = $this->result->fetchObject();
# This while loop will remain true until we run out of posts
while($post = $this->cur_result) {
return true;
}
# At which point it turns false, ending the loop in the template file
return false;
}
# We don't have any posts :(
else {
return false;
}
}
public function content($excerpt = '') {
# We didn't screw up and keep an empty query, did we?
if(!empty($this->cur_result)) {
echo stripslashes($this->cur_result->post);
}
}