2009-03-24 4 views
0

медведь со мной, я немного знакомы со всем этим,MYSQL ОШИБКА

У меня есть этот запрос работает в моем 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()); 
} 
} 

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

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Title Number 1, General, Blogging, Kayaking, General, Tgis is blog number spelli' at line 2

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

ответ

4

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

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

Хорошо работает, не могли бы вы объяснить ссылки «% s», я их не понимаю? – 2009-03-24 12:03:08

+0

% s средство строка выпуск. – OIS

6

У вас есть одна цитата, отсутствующая перед $ tags.

0

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

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_real_escape_string MySQL, которая предваряется обратной косой черты на следующие символы: \ x00 \ п, \ г, \,»," и \ x1A.

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

+0

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

0

Как говорит aknock, вам не хватает «до $ тегов

Тем не менее, вы действительно должны использовать mysql_escape_string для защиты от SQL injection атак. Использование 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 грушевого DB объект)

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

Смежные вопросы