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

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

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

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

    Joined:
    1 Feb 2007
    Messages:
    260
    Likes Received:
    158
    Reputations:
    62
    Byrger опиши поточнее ситуацию, в каком тебе случае надо это значение доставать.
     
  2. Architek86

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

    Joined:
    20 Feb 2008
    Messages:
    80
    Likes Received:
    1
    Reputations:
    0
    Народ, здесь "SELECT * FROM `users` WHERE `nick`='$login'" (да и везде, где есть WHERE)
    nick и $login сравниваются с учётом регистра, или нет?? Если да, то как сделать без учёт регистра?
     
  3. pento

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

    Joined:
    3 Jul 2006
    Messages:
    126
    Likes Received:
    24
    Reputations:
    -1
    Сравниваются с учётом.
    Для мускуля заюзать lower
     
  4. VDShark

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

    Joined:
    1 Feb 2007
    Messages:
    260
    Likes Received:
    158
    Reputations:
    62
    Зависит от коллации :)
    upd:
    Набросал небольшой примерчик.
    Создадим простую табличку:

    Code:
    CREATE TABLE IF NOT EXISTS `t2` (
      `q` varchar(10) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    Закинм туда 2 кортежа:
    Code:
    aaa
    Aaa
    
    Сопаставление у нас utf8_general_ci (где ci значит case-insensetive, для тех кто не знает).

    Выполним запрос:
    Code:
    select * FROM t2 where q = 'aaa'
    получим
    Code:
    aaa
    Aaa
    А теперь выполним следующее:
    Code:
    select * FROM t2 where q = 'aaa' collate 'utf8_bin'
    получим
    Code:
    aaa
    Выводы напрашиваются сами =)
     
    #624 VDShark, 21 May 2009
    Last edited: 21 May 2009
  5. OnArs

    OnArs Banned

    Joined:
    1 Aug 2008
    Messages:
    211
    Likes Received:
    13
    Reputations:
    1
    Мужики, Всем привет! ;)

    Возникла такая проблема...


    Есть вот такой код:

    PHP:
    $user $_COOKIE['user'];
    $key_id  $_POST['key_id'];
            
    $result mysql_query("UPDATE base SET poster_id='$user', key_id='$key_id', post_date=NOW(), done='wait' WHERE page='$page' LIMIT 1",$db);
    Проблема в том, что:
    Код срабатывает всегда, но лишь частично, не смотря на то, что в $key_id всегда есть трёхзначное число и оно точно передаётся (не теряется) в результате пост запроса.

    Что значит частично:
    Т.е. иногда запись обновляется так как будто $key_id пуст.

    Примечание:
    Поле key_id в таблице base типа INT(5)


    Подскажите пожалуйста, в чём может быть проблема? :confused:
     
  6. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    Эмм... Это реальный кусок кода? У тебяж тама SQL Inj =\
    Юзай
    $key_id = intval($_POST['key_id']);
    И если $_POST['key_id'] будет буквами, то запишется 0 а не просто пустая строка
     
  7. OnArs

    OnArs Banned

    Joined:
    1 Aug 2008
    Messages:
    211
    Likes Received:
    13
    Reputations:
    1
    Пончик, большое тебе спасибо. Попробую сменить и посмотрим что будет.


    Так же спасибо за заботу, но это приватный скрипт, так что бояться нечего ;)

    P.s. Ещё какие-нибудь предположения по поводу вышеизложенной проблемы будут?


    Заранее благодарен! ;)
     
    #627 OnArs, 21 May 2009
    Last edited: 21 May 2009
    1 person likes this.
  8. OnArs

    OnArs Banned

    Joined:
    1 Aug 2008
    Messages:
    211
    Likes Received:
    13
    Reputations:
    1
    Появился ещё один вопрос, помогите с ним пожалуйста! ;)



    Есть вот такой кусок кода:
    PHP:
    $result mysql_query("SELECT count(*) FROM base WHERE pr='7'",$db);
    $se mysql_fetch_array($result);
    $pr7 $se[0];
                
    $result mysql_query("SELECT count(*) FROM base WHERE pr='6'",$db);
    $se mysql_fetch_array($result);
    $pr6 $se[0];
                
    $result mysql_query("SELECT count(*) FROM base WHERE pr='5'",$db);
    $se mysql_fetch_array($result);
    $pr5 $se[0];
        
    $result mysql_query("SELECT count(*) FROM base WHERE pr='4'",$db);
    $se mysql_fetch_array($result);
    $pr4 $se[0];
                
    $result mysql_query("SELECT count(*) FROM base WHERE pr='3'",$db);
    $se mysql_fetch_array($result);
    $pr3 $se[0];
                
    $result mysql_query("SELECT count(*) FROM base WHERE pr='2'",$db);
    $se mysql_fetch_array($result);
    $pr2 $se[0];
    Т.е. в 6 переменных Я получаю кол-во страниц с заданными параметрами. По-моему так не должно быть, как оптимизировать эту группу запросов?


    Большое спасибо!
     
  9. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Так не годиццо?
    PHP:
    $result mysql_query ("SELECT * FROM base WHERE pr = '2'"$db); 
    $pr2 mysql_num_rows ($result);
    ---
    Added:
    Либо же одним SQL-запросом
    Code:
    SELECT pr, COUNT(*) FROM base WHERE pr IN (7, 6, 5, 4, 3, 2) GROUP BY pr;
    
     
    #629 krypt3r, 22 May 2009
    Last edited: 22 May 2009
  10. Byrger

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

    Joined:
    7 Mar 2008
    Messages:
    521
    Likes Received:
    26
    Reputations:
    -4
    Не могу перенести БД MySQL форума Version 3.8.1
    Проблема в том что форум создавался в Литвии и сама Бд создана в кодировке UTF-8 юникод
    Сравнение таблиц latin1_swedish_ci
    Если сделать дамп любой прогой или PhpMyAdmin`ом то будет такая бяка
    Даже если просто в PhpMyAdmin смотеть на это...
    Как сменить кодировку чтоб норм по русски было?

    Хотя нормально сейчас форум стоит, а вот переносится не хочет
     
  11. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    http://www.artlebedev.ru/tools/decoder/

    CP1252 → CP1251

    выстави в браузере правильную кодировку и не парь мозг

    ЗЫЖ Нормальный дамп, бывают и хуже

    ЗЗЫЫЖЖ Ушол писать прогу для автоконвертации дампов в нужную кодировку, заманали
     
  12. Byrger

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

    Joined:
    7 Mar 2008
    Messages:
    521
    Likes Received:
    26
    Reputations:
    -4
    Ладно я могу перевести в другую кодировку но я не могу перевести целый дамп базы....
    как быть?
     
  13. FireFenix

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

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    PHP:
    //Уствнока кодировки клиента
    mysql_query('SET character_set_client=cp1251');
    //Уствнока кодировки запросов
    mysql_query('SET character_set_results=cp1251'); 
    //Уствнока кодировки соединения
    mysql_query('SET character_set_connection=cp1251'); 
    //Уствнока кодировки сервера
    mysql_query('SET character_set_server=cp1251');
    Заменяешь cp1251 на нужную кодировку и радуешся жизни, только не попутай направление кодировок
     
  14. SaiRus

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

    Joined:
    24 Nov 2008
    Messages:
    369
    Likes Received:
    41
    Reputations:
    0
    подскажите, правильно ли на каждой странице прописывать/инклудить коннект к базе?сайт хоум на ней всего 3 страницы
     
  15. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Да, в каждом скрипте прописывается подключение к БД. В конце скрипта его нужно закрывать
     
  16. REBUUS

    REBUUS Active Member

    Joined:
    6 Apr 2009
    Messages:
    314
    Likes Received:
    111
    Reputations:
    9
    можно и на одной, если ты другие просто будешь подгружать
     
  17. PaCo

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

    Joined:
    6 Feb 2008
    Messages:
    436
    Likes Received:
    138
    Reputations:
    25
    Ну логично предположить что инклюдить файл в котором происходит конект к бд только в тех частях сайта где используеться данные из БД.

    Если речь идет про яп - PHP и бд MySQL то бы сказал рекомендуеться:
     
  18. Велемир

    Joined:
    19 Jun 2006
    Messages:
    1,123
    Likes Received:
    96
    Reputations:
    -25
    Вопрос: не возникнет ли конфликта?

    DROP TABLE IF EXISTS `vb_access`;
    SET @saved_cs_client = @@character_set_client;
    SET character_set_client = utf8;
    CREATE TABLE `vb_access` (
    `userid` int(10) unsigned NOT NULL DEFAULT '0',
    `forumid` smallint(5) unsigned NOT NULL DEFAULT '0',
    `accessmask` smallint(5) unsigned NOT NULL DEFAULT '0',
    PRIMARY KEY (`userid`,`forumid`)
    ) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
    SET character_set_client = @saved_cs_client;

    Т.е. какая кодировка в базе будет - utf8 или cp1251 ?
     
  19. FireFenix

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

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    Поидее запрос должен обработаться в utf8
    Но тут ещё завясит от древности MySQL и установленных опций
     
  20. Vanofuture

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

    Joined:
    24 Apr 2008
    Messages:
    34
    Likes Received:
    10
    Reputations:
    0
    Всем хай, нужна помощь с составлением MySql запроса. Задача:
    Из таблицы xxx надо удалить все записи у которых id равен 5(записей могут быть сотни), при этом у каждой записи есть поле name и для каждой удаляемой записи надо найди запись из таблицы yyy, в которой поле name совпадает с значением поля name удаляемой записи, и отнять от значения count поля из таблицы yyy еденицу. Как такое реализовать с наименьшим количеством запросов, если такое вообще возможно?
     
Thread Status:
Not open for further replies.