[sql] Вопросы по БД

Discussion in 'PHP' started by FraiDex, 25 Feb 2008.

Thread Status:
Not open for further replies.
  1. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Axel G если все работало, а потом перестало - виноваты вы, исправляйте все что сделали до этого
     
    _________________________
  2. Axel G

    Axel G New Member

    Joined:
    28 Jan 2009
    Messages:
    86
    Likes Received:
    3
    Reputations:
    3
    Gifts, это понятно, ладно такой вопрос. phpMyAdmin работает с базой иным образом? Пробую в майадмине ручками задать значение счетчику, все ок +1, через сайт +2 летит. Как вообще php обрабатывает запрос mysql_query("UPDATE ..."); м отправляет его на сервер mysql?
     
  3. SergioBlog

    SergioBlog New Member

    Joined:
    21 Jan 2011
    Messages:
    10
    Likes Received:
    2
    Reputations:
    0
    Помогите составить запрос)
    [​IMG]
    нужно статус изменить с 0 на 1 и в поле контент вписать слово test. Пытался составить - всё время выдаёт you have error in sql syntax. В общем не справился сам(
     
  4. d1v

    d1v Elder - Старейшина

    Joined:
    21 Feb 2009
    Messages:
    676
    Likes Received:
    331
    Reputations:
    120
    UPDATE blog_content SET status = 1, content = 'test' WHERE category = 3
     
    #1484 d1v, 14 Aug 2011
    Last edited: 14 Aug 2011
  5. brain

    brain Elder - Старейшина

    Joined:
    4 Jul 2010
    Messages:
    249
    Likes Received:
    90
    Reputations:
    33
    SergioBlog
    PHP:
    UPDATE `таблица вашаSET `status`='1', `content`='test'
     
  6. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Axel G Вы дважды вызываете функцию или дважды проводите инкремент. Впишите сразу перед запросом вывод текста в браузер.

    SergioBlog Не забывайте кавычки вокруг параметров.
    Code:
    UPDATE `table` SET `status`='1', `content`='test' WHERE `blogid` = 123456;
     
    _________________________
  7. SergioBlog

    SergioBlog New Member

    Joined:
    21 Jan 2011
    Messages:
    10
    Likes Received:
    2
    Reputations:
    0
    А если нужно конкретному блогу то добавить AND blogid=123?
    UPDATE blog_content SET status = 1, content ='<? phpinfo(); ?>' WHERE category = 3 AND blogid = b1000003;

    ошибку выдаёт =\ Точку с запятой считает закрытием запроса
     
  8. brain

    brain Elder - Старейшина

    Joined:
    4 Jul 2010
    Messages:
    249
    Likes Received:
    90
    Reputations:
    33
    Ошибка в синтаксисе? Вы поставили `` такие ковычки?
     
  9. SergioBlog

    SergioBlog New Member

    Joined:
    21 Jan 2011
    Messages:
    10
    Likes Received:
    2
    Reputations:
    0
    Вот такой запрос делаю:
    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
     
  10. brain

    brain Elder - Старейшина

    Joined:
    4 Jul 2010
    Messages:
    249
    Likes Received:
    90
    Reputations:
    33
    Здесь такие ковычки '<? phpinfo(); ?>'
    Вот так пробуйте
    PHP:
    UPDATE `blog_content` SET `status`='1', `content`='<? phpinfo(); ?>' WHERE `blogid` = '100000';
     
  11. SergioBlog

    SergioBlog New Member

    Joined:
    21 Jan 2011
    Messages:
    10
    Likes Received:
    2
    Reputations:
    0
    Вот запрос:
    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
     
    #1491 SergioBlog, 14 Aug 2011
    Last edited: 14 Aug 2011
  12. Axel G

    Axel G New Member

    Joined:
    28 Jan 2009
    Messages:
    86
    Likes Received:
    3
    Reputations:
    3
    Да нет, же, вывод в браузер делал, получал 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 вы отлично разбираетесь во всем этом, неужели ни разу не встречались с подобным?
     
  13. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    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) то вы таки нас обманываете.
     
    _________________________
  14. Axel G

    Axel G New Member

    Joined:
    28 Jan 2009
    Messages:
    86
    Likes Received:
    3
    Reputations:
    3
    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
    ...
    Смысл мне вас обманывать.
     
  15. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Axel G Покажите без купюр, а? Вот начиная от $old_views до $new_views без пропуска строк. (Можете в ЛС, если такая конспирация) Иначе я действительно поверю в мистику

    SergioBlog в какой среде выполняются запросы? Замените '<?PHP phpinfo(); ?>' на 0x3c3f50485020706870696e666f28293b203f3e
    PHP:
    UPDATE `blog_contentSET `status`='1', `content`=0x3c3f50485020706870696e666f28293b203f3e WHERE `blogid` = 'b1000003';
     
    _________________________
  16. SergioBlog

    SergioBlog New Member

    Joined:
    21 Jan 2011
    Messages:
    10
    Likes Received:
    2
    Reputations:
    0
    Gifts, спасибо большое, заработало(не подумал). Делал запросы через тулзу в rst шелле.
     
  17. Axel G

    Axel G New Member

    Joined:
    28 Jan 2009
    Messages:
    86
    Likes Received:
    3
    Reputations:
    3
    Gifts, мистика однако, в отдельном файле все работает на ура, в рабочем сценарии +2. Буду разбираться, хотя хеадеров нигде нет, да и циклов тоже, спасибо за наводку.

    Апдейт:

    Ничего себе что раскопал, я такое даже не знал ранее.

    HTML:
    <body style="background: #000000 url('') no-repeat">
    Вот он этот +2. Спасибо, что помогли разобраться.
     
    #1497 Axel G, 17 Aug 2011
    Last edited: 17 Aug 2011
    1 person likes this.
  18. -=Zhenek=-

    -=Zhenek=- Elder - Старейшина

    Joined:
    31 Dec 2007
    Messages:
    271
    Likes Received:
    77
    Reputations:
    1
    Подскажите ,а го голова кипит уже(

    Нужно из базы 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
     
  19. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    -=Zhenek=- Используй скобки, Люк
    Code:
    SELECT * FROM webchat_lines WHERE (private='$_SESSION[login]' OR private='') AND id>$last_id
     
    _________________________
  20. AnGeI

    AnGeI Elder - Старейшина

    Joined:
    8 Dec 2008
    Messages:
    395
    Likes Received:
    79
    Reputations:
    16
    Проблемы с кодировкой (db.opt не создан). Нужно исправить.
    Вывод такой:

    [​IMG]
     
Thread Status:
Not open for further replies.