непонятная запись

Тема в разделе "Базы данных", создана пользователем sunyang, 5 апр 2011.

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

    sunyang

    Регистр.:
    25 апр 2009
    Сообщения:
    444
    Симпатии:
    30
    Что означает эта запись обновления ячеек?
    PHP:
    $sql->query('UPDATE ?_users SET ?a WHERE id=?d'$updateintval($_POST['saveid']));
    в $update передается:
    PHP:
    $update = array('firstname'  => $firstname,
                        
    'lastname'   => $lastname,
                        
    'bdate'      => $b_year.'-'.$b_month.'-'.$b_date,
                        
    'slove'      => &$slove,
                        
    'hobbi'      => &$hobbi,
                        
    'work'       => &$work,
                        
    'love_music' => &$love_music,
                        
    'love_movie' => &$love_movie,
                        
    'love_books' => &$love_books,
                        
    'love_color' => &$love_color,
                        
    'i_am'       => &$i_am,
                        
    'deviz'      => &$deviz,
                        
    'my_dream'   => &$my_dream,
                        
    'country'    => &$country,
                        
    'district'   => &$district,
                        
    'city'       => &$city,
                        
    'icq'        => &$icq,
                        
    'rating'     => &$rating,);
    непонятны обозначения: ?_users, ?a, id=?d
    Что за знаки вопроса?
    эта запись для этой таблицы:
    PHP:
    CREATE TABLE IF NOT EXISTS `gs_users` (
      `
    idint(6unsigned NOT NULL AUTO_INCREMENT,
      `
    emailvarchar(100NOT NULL,
      `
    passvarchar(35NOT NULL,
      `
    fpassvarchar(30) DEFAULT NULL,
      `
    loginvarchar(30NOT NULL,
      `
    tzonechar(6NOT NULL,
      `
    edatedatetime NOT NULL,
      `
    mdatedatetime NOT NULL,
      `
    cdatevarchar(10NOT NULL,
      `
    loggedint(1unsigned DEFAULT '0',
      `
    firstnamevarchar(60NOT NULL,
      `
    lastnamevarchar(60NOT NULL,
      `
    bdatedate NOT NULL,
      `
    sloveint(2unsigned DEFAULT '0',
      `
    hobbitext,
      `
    workvarchar(250) DEFAULT NULL,
      `
    love_musictext,
      `
    love_movietext,
      `
    love_bookstext,
      `
    love_colortext,
      `
    i_amtext,
      `
    deviztext,
      `
    my_dreamtext,
      `
    countryvarchar(50) DEFAULT NULL,
      `
    districtvarchar(50) DEFAULT NULL,
      `
    cityvarchar(50) DEFAULT NULL,
      `
    icqvarchar(20) DEFAULT NULL,
      `
    viewsint(6unsigned DEFAULT '0',
      `
    ratingint(6) DEFAULT '0',
      
    PRIMARY KEY (`id`)
    ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=;
     
  2. stealthdebuger

    stealthdebuger Механик

    Administrator
    Регистр.:
    25 авг 2008
    Сообщения:
    624
    Симпатии:
    1.379
    Знаки ? - это специальные маркеры, так называемые placeholders. Они заменяются теми значениями, что перечислены в конце вашей строки.
    Но в данном случае их должно быть три, 1-префикс таблицы, которого нет в вашем случае, 2 - значение для апдейта, третье - id изменяемой записи.
     
  3. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    364
    Симпатии:
    117
    >>UPDATE ?_users
    эта штука заменится на UPDATE `gs_users`

    >> SET ?a
    эта штука зменится на
    SET `firstname` = $firstname,
    'bdate' = $b_year.'-'.$b_month.'-'.$b_date,

    и так далее ... используя все переменные из массива $update

    >>>WHERE id=?d'
    ну а в третий параметр подставится значение с intval($_POST['saveid'])

    и в результате все это дело преобразуется в обычный SQL запрос на 'UPDATE'
     
  4. sunyang

    sunyang

    Регистр.:
    25 апр 2009
    Сообщения:
    444
    Симпатии:
    30
    значения в конце строки это: $update, intval($_POST['saveid']
    Но в моем случае еще не указано значение преффикса, так?

    А что за ?a - ей передается массив значений $update, которые нужно обновить?

    Добавлено через 8 минут
    ясно, но странно...
    я добавил в таблицу значение `phone` text
    добавил в массив $update запись:
    PHP:
    'phone' => &$phone
    PHP:
    CREATE TABLE IF NOT EXISTS `gs_users` ( 
      `
    idint(6unsigned NOT NULL AUTO_INCREMENT
      `
    emailvarchar(100NOT NULL
      `
    passvarchar(35NOT NULL
      `
    fpassvarchar(30) DEFAULT NULL
      `
    loginvarchar(30NOT NULL
      `
    tzonechar(6NOT NULL
      `
    edatedatetime NOT NULL
      `
    mdatedatetime NOT NULL
      `
    cdatevarchar(10NOT NULL
      `
    loggedint(1unsigned DEFAULT '0'
      `
    firstnamevarchar(60NOT NULL
      `
    lastnamevarchar(60NOT NULL
      `
    bdatedate NOT NULL
      `
    sloveint(2unsigned DEFAULT '0'
      `
    hobbitext
      `
    workvarchar(250) DEFAULT NULL
      `
    love_musictext
      `
    love_movietext
      `
    love_bookstext
      `
    love_colortext
      `
    i_amtext
      `
    deviztext
      `
    my_dreamtext
      `
    countryvarchar(50) DEFAULT NULL
      `
    districtvarchar(50) DEFAULT NULL
      `
    cityvarchar(50) DEFAULT NULL
      `
    icqvarchar(20) DEFAULT NULL
      `
    viewsint(6unsigned DEFAULT '0'
      `
    ratingint(6) DEFAULT '0'
    `
    phonetext,
      
    PRIMARY KEY (`id`) 
    ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=
    Но когда обновляю записи, в поле rating записывается непонятное число, а поле phone остается пустым, хотя значение было введено.

    Добавлено через 10 минут
    ааа, понял в чем проблема!!
    У меня в input для phone стоял name rating

    Всем спасибо!!