Добавить 1 к значению в поле (SQLite + PDO)

Тема в разделе "Базы данных", создана пользователем alexz15, 18 мар 2013.

Модераторы: latteo
  1. alexz15

    alexz15

    Регистр.:
    3 окт 2008
    Сообщения:
    394
    Симпатии:
    190
    Приветствую! Второй день не могу понять, почему добавляется +2 вместо +1:
    Код:
    UPDATE table SET foo=foo+1 WHERE bar=1
    Помогите плз решить задачу. Вот код:
    PHP:
    <?php
     
        $key 
    1;
     
        
    $db gb_open('db_users'); // создаем базу
     
        
    gb_add($db$key5); // добавляем старт счетчика +5
     
        
    gb_repl($db$key); // прибавляем к счетчику +1
     
        
    $q_key $db->query("SELECT * FROM db_users WHERE key='$key'");
        
    $row_key $q_key->fetchAll();
        
    print_r($row_key[0]['counts']);
               
    function 
    gb_open($db){
        
    $my_database $db ".db";
        
    $db = new PDO('sqlite:'.$my_database); 
        
    $db->exec("CREATE TABLE db_users("
            
    "id INTEGER PRIMARY KEY, "
            
    "key TEXT, "
            
    "counts INTEGER);"
        
    );       
        return 
    $db;
    }
     
    function 
    gb_add($db$key$counts 5) {
        
    $db->exec("INSERT INTO db_users "
        
    "(id, key, counts)"
        
    " VALUES (NULL, '$key', '$counts')");
    }
     
    function 
    gb_repl($db$key) {
        return 
    $db->exec("UPDATE db_users SET "
            
    "counts=counts+1 "
            
    "WHERE key='$key'"
        
    );
    }
     
  2. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.451
    Симпатии:
    1.245
    Работает корректно - добавляется +1.
     
    alexz15 нравится это.
  3. alexz15

    alexz15

    Регистр.:
    3 окт 2008
    Сообщения:
    394
    Симпатии:
    190
    Благодарю!) Оказывается браузер firefox дважды запрашивал страницу. Отключил плагин RDS bar - заработало как надо. А что можно придумать, чтобы блокировался двойной запрос?
     
  4. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.451
    Симпатии:
    1.245
    Если задвоение от двух запросов к странице - добавьте базе поля дата-тайм и IP, контролируя плюсование по ним.
    Например, плюсик будет только раз в сутки или раз в минуту с одного IP.
     
  5. palbanec

    palbanec

    Регистр.:
    2 июл 2010
    Сообщения:
    457
    Симпатии:
    29
    А мне нужно в базе данных на все товары добавить к ценнам +1000р. Как это сделать?Можно как-то запросом в mySQL?
     
  6. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.451
    Симпатии:
    1.245
    UPDATE table SET price=price+1000