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

Форум MySQL

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

 

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

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

тема: You have an error in your SQL syntax
 
 автор: Лена   (04.08.2009 в 23:32)   письмо автору
 
 

Делаю запрос:

 $your_ip = "SELECT * FROM vote_ip
             WHERE ip = " . $ip . " AND puttime > (NOW() - INTERVAL 2 MINUTE)";

Пишет ошибку:
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 '.0.1 AND puttime > (NOW() - INTERVAL 2 MINUTE)' at line 2 query: SELECT * FROM vote_ip WHERE ip = 127.0.0.1 AND puttime > (NOW() - INTERVAL 2 MINUTE) in Z:\home\st\www\sites\all\modules\poll\poll.module on line 122.

Исправляю, делаю:
$your_ip = "SELECT * FROM vote_ip
             WHERE ip = '" . $ip . "' AND puttime > (NOW() - INTERVAL 2 MINUTE)";


Не работает вообще. Почему?
Перепробовала и другие варианты кавычек.

Тип поля ip - text

  Ответить  
 
 автор: ???   (05.08.2009 в 00:15)
 
   для: Лена   (04.08.2009 в 23:32)
 

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

поле `ip` какого типа ?

  Ответить  
 
 автор: Лена   (05.08.2009 в 00:20)   письмо автору
 
   для: ???   (05.08.2009 в 00:15)
 

кеш почистила, не в этом дело

>поле `ip` какого типа ?
написала же, выше...

  Ответить  
 
 автор: DJ Paltus   (05.08.2009 в 00:23)   письмо автору
 
   для: Лена   (04.08.2009 в 23:32)
 

А точно не работает? Опросите mysql_error() после запроса, если нуль, то проблема в самой базе. Например, если в нее слово "127.0.0.1" записано с каким-нибудь лишним пробелом, скажем, в конце, или просто пустой выхлоп в результате приходит, если совпадений, к примеру, не попалось.

  Ответить  
 
 автор: serjinio   (05.08.2009 в 00:29)   письмо автору
 
   для: Лена   (04.08.2009 в 23:32)
 

127.0.0.1
в таком формате у вас хранятся ip в базе?
INET_ATON('127.0.0.1')

http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=61551

  Ответить  
 
 автор: .........   (05.08.2009 в 00:52)
 
   для: serjinio   (05.08.2009 в 00:29)
 

>в таком формате у вас хранятся ip в базе?
с этим разобрались уже :)

CREATE TABLE `test`.`vote_ip` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`ip` TEXT NOT NULL ,
`puttime` DATETIME NOT NULL
) ENGINE = MYISAM ;

INSERT `vote_ip` VALUES
(NULL, '127.0.0.1', (NOW() + INTERVAL 2 MINUTE)),
(NULL, '127.0.0.1', (NOW() + INTERVAL 1 HOUR)),
(NULL, '127.0.0.1', NOW());

SELECT * FROM vote_ip
WHERE ip = '127.0.0.1' AND puttime > (NOW() - INTERVAL 2 MINUTE);

у меня запрос работает , выполнял из phpmyadmin 3.2.1-rc1

  Ответить  
 
 автор: Trianon   (05.08.2009 в 01:28)   письмо автору
 
   для: Лена   (04.08.2009 в 23:32)
 

> делаю:
>
$your_ip = "SELECT * FROM vote_ip
>             WHERE ip = '" . $ip . "' AND puttime > (NOW() - INTERVAL 2 MINUTE)";


>Не работает вообще. Почему?
>Перепробовала и другие варианты кавычек.
>Тип поля ip - text

Фрагмент дампа таблицы? Со структурой и соотв. строкой

Заметьте, в цитате я оставил лишь то, что имело смысл указывать.
Уж коль скоро Вы разобрались с первой ошибкой.

text - не самый удачный тип для такого поля. Лучше взять varchar(40). Хоть дело и не в нем.

  Ответить  
 
 автор: Лена   (05.08.2009 в 10:44)   письмо автору
 
   для: Trianon   (05.08.2009 в 01:28)
 

Автоинкремент на поле забыла поставить. С чем себя и поздравила.
Когда вывод ошибок включила(который в спешке тоже не поставила), увидела "duplicate entry for key..."

>text - не самый удачный тип для такого поля. Лучше взять varchar(40). Хоть дело и не в нем.

Если не использовать INET_ATON, согласна.
Но какая разница, какой тип поля будет, если мы с помощью INET_ATON преобразуем его в 4-х байтовое или 8 байтовое число? В мануале написано, что на входе должна быть строка - а как эта строка уже хранится...

  Ответить  
 
 автор: Trianon   (05.08.2009 в 11:29)   письмо автору
 
   для: Лена   (05.08.2009 в 10:44)
 

INET_ATON использовать опасно. Это Всё ж таки лишь IPv4.

  Ответить  
 
 автор: Лена   (06.08.2009 в 00:25)   письмо автору
 
   для: Trianon   (05.08.2009 в 11:29)
 

А что же тогда вместо нее использовать?
Где найти безопасную альтернативу? И вообще есть ли такая?
Как можно одновременно конвертировать строку в ее бинарное представление и обеспечить ей защиту?
Еще вот что. Если проблему безопасности адресов попробовали решить в IPv6, то как ее решили на уровне SQL? Если это не решено, то можно же, допустим, конвертировать при помощи SQL , а защиту сделать средствами PHP, если SQL с этим не справляется...
С другой стороны, если какие-то средства защиты и есть в IPv6, шестую версию протокола, как я поняла, еще не используют повсеместно, тогда и применять что-то, что работает только в шестой версии, нет смысла. Как-то все безрадостно получается...

  Ответить  
 
 автор: Trianon   (06.08.2009 в 00:44)   письмо автору
 
   для: Лена   (06.08.2009 в 00:25)
 

А нужно именно в бинарное?

  Ответить  
 
 автор: serjinio   (06.08.2009 в 04:44)   письмо автору
 
   для: Trianon   (05.08.2009 в 11:29)
 

А в чем выражается опасность?

  Ответить  
 
 автор: Trianon   (06.08.2009 в 06:51)   письмо автору
 
   для: serjinio   (06.08.2009 в 04:44)
 

код оказывается жестко привязанным к стеку IPv4.

  Ответить  
Rambler's Top100
вверх

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