Gifts, это понятно, ладно такой вопрос. phpMyAdmin работает с базой иным образом? Пробую в майадмине ручками задать значение счетчику, все ок +1, через сайт +2 летит. Как вообще php обрабатывает запрос mysql_query("UPDATE ..."); м отправляет его на сервер mysql?
Помогите составить запрос) нужно статус изменить с 0 на 1 и в поле контент вписать слово test. Пытался составить - всё время выдаёт you have error in sql syntax. В общем не справился сам(
Axel G Вы дважды вызываете функцию или дважды проводите инкремент. Впишите сразу перед запросом вывод текста в браузер. SergioBlog Не забывайте кавычки вокруг параметров. Code: UPDATE `table` SET `status`='1', `content`='test' WHERE `blogid` = 123456;
А если нужно конкретному блогу то добавить AND blogid=123? UPDATE blog_content SET status = 1, content ='<? phpinfo(); ?>' WHERE category = 3 AND blogid = b1000003; ошибку выдаёт =\ Точку с запятой считает закрытием запроса
Вот такой запрос делаю: UPDATE `blog_content` SET `status`='1', `content`=`<? phpinfo(); ?>` WHERE `blogid` = 100000; Query#0 : UPDATE `blog_content` SET `status`='1', `content`=`<? phpinfo() Error : Unknown column ' Query#1 : ?>` WHERE `blogid` = 100000 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 '?>` WHERE `blogid` = 100000' at line 1
Здесь такие ковычки '<? phpinfo(); ?>' Вот так пробуйте PHP: UPDATE `blog_content` SET `status`='1', `content`='<? phpinfo(); ?>' WHERE `blogid` = '100000';
Вот запрос: Code: UPDATE `blog_content` SET `status`='1', `content`='<? phpinfo(); ?>' WHERE `blogid` = 'b1000003'; select * from blog_content limit 2,1; Выдаёт: Query#0 : UPDATE `blog_content` SET `status`='1', `content`='<? phpinfo() 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 '' Query#1 : ?>' WHERE `blogid` = 'b1000003' 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 '?>' WHERE `blogid` = 'b1000003'' at line 1 Query#2 : select * from blog_content limit 2,1
Да нет, же, вывод в браузер делал, получал n+1. Апдейчу базу и в ней каким-то лешим уже n+1+1. Дважду провожу инкремент? ------ цитирую первое сообщение Мужики, проблема. При update мускуль увеличивает значение поля на 1, то есть в итоге получается что на 2. PHP: ... mysql_query("SET NAMES 'cp1251'"); ... $id = $row['id']; $time = time(); $views = $row['views'] + 1; mysql_query("UPDATE table SET view='$time', views='$views' WHERE id='$id'"); ... Таблица: MyISAM cp1251_general_ci. Структура столбца: int(12) попробовал сменить на text cp1251_general_ci, результата не дало. В переменной $views содержится правильное увеличенное на один значение, почему ж при обновлении пишется другое? Ранее столкнулся с такой же проблемой, только дело касалось неправильного обновления md5 хэша пароля, тогда тупо забил и удалил код. ------ цитирую первое сообщение Этот код расположен не в цикле, обычный счетчик, сам update увеличивает значение на единицу. Аналогичное было замечено дня 2 или 3 назад, но с md5 хешами паролей, клиенту в браузер выводился один, в базу записывался совершенно другой. Что с ` что без них, результат один. Gifts вы отлично разбираетесь во всем этом, неужели ни разу не встречались с подобным?
Axel G А еще я не верю в чудеса. Вы заменили этот запрос: PHP: mysql_query("UPDATE table SET view='$time', views='$views' WHERE id='$id'"); Вот этим: PHP: mysql_query("UPDATE `table` SET `view`='$time', `views`=`views`+1 WHERE `id` = '$id'") Заменили в точности и у вас не работает? Покажите что происходит до этих строк. Плюс попробуйте в phpmyadmin выполнить запрос "SHOW TRIGGERS;" на вашей базе. Если уж совсем мания у вас - заглушите сайт, создайте файл вида: PHP: <?PHP $conn = mysql_connect('соединение прапапа'); mysql_select_db('db'); $query1 = mysql_query("SELECT `id`, `views` FROM `table` WHERE `id`=123") or die('Query 1 error: '.mysql_error()); mysql_query("UPDATE `table` SET `views`=`views`+1 WHERE `id` = '123'") or die('Update error: '.mysql_error()); $query2 = mysql_query("SELECT `id`, `views` FROM `table` WHERE `id`='123'") or die('Query 2 error: '.mysql_error()); $res1 = mysql_fetch_array($query1); $res2 = mysql_fetch_array($query2); echo '<pre>'; var_dump($res1); var_dump($res2); echo '</pre>'; Только для чистоты эксперимента заглушите на момент выполнения сайт. Если результат будет ожидаемым (увеличение на 1) то вы таки нас обманываете.
Gifts, да. Вот текущий запрос: PHP: mysql_query("UPDATE `table` SET `view`='$time', `views`=`views`+1 WHERE `id`='$id' LIMIT 1"); Увеличение значения также идет на +2, вместо положенного +1. SHOW TRIGGERS в phpMyAdmin ничего не возвратил. Ок. Сделаю комментарии результатов, может это важно работает на php 5.1.6 PHP: ... $old_views = $old_row['views']; // n ... mysql_query("UPDATE `table` SET `view`='$time', `views`=`views`+1 WHERE `id`='$id' LIMIT 1"); ... $new_views = $new_row['views']; // n+2, а должно быть n+1 ... Смысл мне вас обманывать.
Axel G Покажите без купюр, а? Вот начиная от $old_views до $new_views без пропуска строк. (Можете в ЛС, если такая конспирация) Иначе я действительно поверю в мистику SergioBlog в какой среде выполняются запросы? Замените '<?PHP phpinfo(); ?>' на 0x3c3f50485020706870696e666f28293b203f3e PHP: UPDATE `blog_content` SET `status`='1', `content`=0x3c3f50485020706870696e666f28293b203f3e WHERE `blogid` = 'b1000003';
Gifts, мистика однако, в отдельном файле все работает на ура, в рабочем сценарии +2. Буду разбираться, хотя хеадеров нигде нет, да и циклов тоже, спасибо за наводку. Апдейт: Ничего себе что раскопал, я такое даже не знал ранее. HTML: <body style="background: #000000 url('') no-repeat"> Вот он этот +2. Спасибо, что помогли разобраться.
Подскажите ,а го голова кипит уже( Нужно из базы webchat_lines выбрать все даные, у которых id>$last_id и private равен либо $user либо пустой. Вот с последним проблемы.. пишу так : SELECT * FROM webchat_lines WHERE private='$_SESSION[login]' OR private='' AND id>$last_id Он думает что : выбрать где приват равен $_SESSION[login]' или он-же равен нулю и ид больше $last_id
-=Zhenek=- Используй скобки, Люк Code: SELECT * FROM webchat_lines WHERE (private='$_SESSION[login]' OR private='') AND id>$last_id