ОШИБКА MYSQL - PullRequest
       35

ОШИБКА MYSQL

0 голосов
/ 24 марта 2009

Потерпи меня, я немного новичок во всем этом,

У меня есть этот запрос в моем скрипте PHP:

$insertQuery = "INSERT INTO blog_articles 
     VALUES '$title', $tags', '$category', '$blog', '$author', '$date'";

Затем я запускаю этот скрипт:

    if ($result = $connector->query($insertQuery)){
    // It worked, give confirmation
    echo '<center><b>Article added to the database</b></center><br>';
}else{
    // It hasn't worked so stop. Better error handling code would be good here!
    die (mysql_error());
}
}

Я получаю эту ошибку:

У вас ошибка в синтаксисе SQL; проверьте правильность синтаксиса в руководстве, соответствующем версии вашего сервера MySQL, рядом с «Название № 1, Общие, Блоги, Каякинг, Общие, Tgis - номер блога spelli» в строке 2

Но я не могу сказать, в чем ошибка, она выглядит хорошо, так что, если кто-то может мне помочь, это было бы здорово, спасибо

Ответы [ 4 ]

6 голосов
/ 24 марта 2009

Перед тегами $ отсутствует одна цитата.

4 голосов
/ 24 марта 2009

Ваш запрос должен быть больше похож на этот

INSERT INTO blog_articles (`title`, `tags`, `category`, `blog`, `author`, `date`)
VALUES ('$title', '$tags', '$category', '$blog', '$author', '$date')

Вам также следует обратить внимание на санацию вашего запроса. Возможно, так (но я не знаю ваших точных настроек, поэтому результаты могут отличаться)

$sql = sprintf("INSERT INTO blog_articles (`title`, `tags`, `category`, 
    `blog`, `author`, `date`) VALUES ('%s', '%s', '%s', '%s', '%s', '%s')",
mysql_real_escape_string($title), mysql_real_escape_string($tags), 
mysql_real_escape_string($category),  mysql_real_escape_string($blog), 
mysql_real_escape_string($author),  mysql_real_escape_string($date));

Здесь используется функция sprintf(), в документации php есть несколько замечательных примеров.

0 голосов
/ 24 марта 2009

Как говорит Акнок, вам не хватает тега 'before $.

Однако вам действительно нужно использовать mysql_escape_string для защиты от SQL-инъекций атак. Использование mysql_escape_string для параметров SQL-запроса - хорошая привычка.

Использование оболочки DB, такой как PEAR , может сделать экранирование параметров менее болезненным. Ваш код выше может быть написан как:

$insertQuery = "INSERT INTO blog_articles \
                  (`title`, `tags`, `category`, `blog`, `author`, `date`) \
                  VALUES (?, ?, ?, ?, ?, ?)";

$data = array($title, $tags, $category, $blog, $author, $date);

if ($result = $connector->query($insertQuery, $data)) {
    // It worked, give confirmation
    echo '<center><b>Article added to the database</b></center><br>';
}else{
    // It hasn't worked so stop. Better error handling code would be good here!
    die (mysql_error());
}

(при условии $connector является объектом PEAR DB)

Явное указание имен и порядка столбцов, которые вы вставляете, делает ваш код более понятным и понятным. Если вы позже измените схему базы данных, вы будете защищены от вставки значений в неправильный столбец или в столбцы, которые больше не существуют.

0 голосов
/ 24 марта 2009

Вам необходимо добавить имена полей, которые вы вставляете в

INSERT INTO blog_articles ('title', 'tags', 'category', 'blog', 'author', 'date') VALUES ('$title', '$tags', '$category', '$blog', '$author', '$date')

Также вам следует добавить код, чтобы избежать двойных или одинарных кавычек в вашем тексте, которые могут нарушить SQL-запрос.

использовать функцию PHP mysql_real_escape_string ()

mysql_real_escape_string () вызывает библиотечную функцию MySQL mysql_real_escape_string, которая добавляет обратную косую черту к следующим символам: \ x00, \ n, \ r, \, ', "и \ x1a.

Для более подробной информации: http://uk.php.net/mysql_real_escape_string

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...