Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
 
 автор: Dizels   (28.09.2007 в 16:53)   письмо автору
 
 

Итак, есть форма добавления города:

<form action=addpynkt.php method=POST>
Введите название пункта: 
<input type="text" name="name" size="30"><br>
Выберите тип населенного пункта:
<select name="statys">
<option value="1">город</option>
<option value="2">пгт</option>
<option value="3">село</option>
</select><br>
<input type="submit" value="Добавить">
<input type="hidden" name="raion" value="<?php echo $_GET['id_raion']; ?>">
</form>

Вот обработчик этой формы:

<?php
include "../config.php"
// получаем данные 
$name trim($_POST['name']);
$statys trim($_POST['statys']);
$raion trim($_POST['raion']);
// Проверяем правильность ввода данных
if(empty($name)) { echo "Введите название пункта";
         exit;
         }
if(empty(
$raion)) { echo "Неправильно выбран район";
            exit;
            }
else
// Формируем SQL-запрос 
$query "SELECT * FROM pynkt  
        WHERE name LIKE '
$name'"
 
$ath mysql_query($query); 
if(!
$ath) echo mysql_error();
if(
mysql_num_rows($ath)>0){
    echo 
"Данный пункт уже есть в списке"
exit; 
 } 
// Формируем SQL-запрос на добавление нового пункта в БД 
// Проверяем, нет ли одинарных кавычек 
$name str_replace("'","`"$name); 
// Добавляем новый пункт 
 
$query_pynkt mysql_query("INSERT INTO pynkt VALUES( 
    NULL, 
    '
$name',
    '
$statys',
    '
$raion')");
if(
mysql_query($query_pynkt))
{
echo 
"<HTML><HEAD>
            <META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>
            </HEAD></HTML>"
;
}
else 
echo 
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 '1' at line 1

Но при этом сам город в таблицу заносит. Что не правильно у меня в синтаксисе?

   
 
 автор: fiper   (28.09.2007 в 17:02)   письмо автору
 
   для: Dizels   (28.09.2007 в 16:53)
 

А в каком запросе ошибка?

может вот так


mysql_query("INSERT INTO pynkt (`поле 1`,`поле 2`,`поле 3`,` поле 4`)VALUES(  'NULL',  '$name', '$statys', '$raion')"); 

   
 
 автор: cheops   (30.09.2007 в 02:34)   письмо автору
 
   для: fiper   (28.09.2007 в 17:02)
 

NULL в кавычки не нужно помещать.

   
 
 автор: cheops   (30.09.2007 в 02:37)   письмо автору
 
   для: Dizels   (28.09.2007 в 16:53)
 

Попробуйте заменить строку
<?php
if(!$ath) echo mysql_error();
?>

следующим образом
<?php
if(!$ath) echo $query;
?>

Как теперь выглядит сообщение об ошибке?

   
 
 автор: Dizels   (30.09.2007 в 12:41)   письмо автору
 
   для: cheops   (30.09.2007 в 02:37)
 

После исправления:

if(!$ath) echo $query;

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

Запрос добавления сейчас выглядит вот так:

// Добавляем новый пункт 

 $query_pynkt = mysql_query("INSERT INTO pynkt VALUES( 
    NULL, 
    '$name',
    '$statys',
    '$raion')");

if(mysql_query($query_pynkt))
{

echo "<HTML><HEAD>
            <META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>
            </HEAD></HTML>";

}
else 
echo mysql_error();

   
 
 автор: Dizels   (30.09.2007 в 14:00)   письмо автору
 
   для: Dizels   (30.09.2007 в 12:41)
 

Вопрос в силе :)

   
 
 автор: sim5   (30.09.2007 в 14:17)   письмо автору
 
   для: Dizels   (30.09.2007 в 14:00)
 

Я уже однажды вас спрашивал - зачем вы дважды делаете запрос?

<?
$query_pynkt 
"INSERT INTO pynkt VALUES(
    NULL,  
    '
$name', 
    
$statys
    
$raion)"// это составили строку запроса, 
               //числовые переменные на надо!!! обрамлять в кавычки
if (mysql_query($query_pynkt))... //это сам запрос и проверка его выполнения

   
 
 автор: Dizels   (30.09.2007 в 14:20)   письмо автору
 
   для: sim5   (30.09.2007 в 14:17)
 

Я так делаю, поскольку так написано в книге PHP 5 Практика создания web-сайтов, а именно по ней я и учусь. Да и собственно вроде все как надо - сначала добавляем, а потом проверяем добавилась запись или нет.

P.S. если я чего-то не догоняю - поясни на примере плз

   
 
 автор: sim5   (30.09.2007 в 14:28)   письмо автору
 
   для: Dizels   (30.09.2007 в 14:20)
 

mysql_query($query_pynkt) - это и будет запрос к базе, на основе переменной $query_pynkt, вы форимируя эту пременную уже делаете запрос, потом проверяя, еще раз запрос. Зачем это, составили строку запроса, затем делаете сам запрос, если это в условии происходит как у вас, то при удачном выполнении запроса произойдет запись в базу и будет возвращено TRUE, в противном случае FALSE - записи по тем или иным причинам не произошло.
Ну а про числовые переменные я сказал, запись может быть, но вы при этом будете получать сообщения.

   
 
 автор: Dizels   (30.09.2007 в 14:44)   письмо автору
 
   для: sim5   (30.09.2007 в 14:28)
 

Ок, тогда запись будет вот такая:

mysql_query("INSERT INTO pynkt (`id_pynkt`,`name`,`statys`,`id_raion`)VALUES(  NULL,  '$name', $statys, $raion)"); 


А как мне теперь сделать так, что если запись добавилась - то скрипт делал редирект на главную, а если ошибка какая, то соответственно выдавал ее.

   
 
 автор: sim5   (30.09.2007 в 14:49)   письмо автору
 
   для: Dizels   (30.09.2007 в 14:44)
 

Напишите лучше так:

<?
$query_pynkt 
"INSERT INTO pynkt VALUES( NULL, '$name', $statys$raion)"
if(
mysql_query($query_pynkt)) header("Location: index.php");
 else 
//ваш код вывода ошибки

   
 
 автор: Dizels   (30.09.2007 в 14:54)   письмо автору
 
   для: sim5   (30.09.2007 в 14:49)
 

Ок, все получилось, спасибо большое!

P.S. исключительно для себя - я так и не понял чем ваш последний запрос:

$query_pynkt = "INSERT INTO pynkt VALUES( NULL, '$name', $statys, $raion)";  
if(mysql_query($query_pynkt)) header("Location: index.php");

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

   
 
 автор: sim5   (30.09.2007 в 14:59)   письмо автору
 
   для: Dizels   (30.09.2007 в 14:54)
 

Ну юморист!))
Первая строка - $query_pynkt = "INSERT INTO pynkt VALUES...., это не запрос, это только параметры запроса, запрос происходит функцией mysql_query($query_pynkt), где в качестве аргумента передается ваша строка параметров - $query_pynkt.
Далее, вы перенаправление делали за счет мета-тегов, а гораздо лучше сделать это хидером:
header("Location: URL-адрес");
Читайте мануал.)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования