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

sunyang

Мастер
Регистрация
25 Апр 2009
Сообщения
440
Реакции
30
Что означает эта запись обновления ячеек?
PHP:
$sql->query('UPDATE ?_users SET ?a WHERE id=?d', $update, intval($_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` (
  `id` int(6) unsigned NOT NULL AUTO_INCREMENT,
  `email` varchar(100) NOT NULL,
  `pass` varchar(35) NOT NULL,
  `fpass` varchar(30) DEFAULT NULL,
  `login` varchar(30) NOT NULL,
  `tzone` char(6) NOT NULL,
  `edate` datetime NOT NULL,
  `mdate` datetime NOT NULL,
  `cdate` varchar(10) NOT NULL,
  `logged` int(1) unsigned DEFAULT '0',
  `firstname` varchar(60) NOT NULL,
  `lastname` varchar(60) NOT NULL,
  `bdate` date NOT NULL,
  `slove` int(2) unsigned DEFAULT '0',
  `hobbi` text,
  `work` varchar(250) DEFAULT NULL,
  `love_music` text,
  `love_movie` text,
  `love_books` text,
  `love_color` text,
  `i_am` text,
  `deviz` text,
  `my_dream` text,
  `country` varchar(50) DEFAULT NULL,
  `district` varchar(50) DEFAULT NULL,
  `city` varchar(50) DEFAULT NULL,
  `icq` varchar(20) DEFAULT NULL,
  `views` int(6) unsigned DEFAULT '0',
  `rating` int(6) DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=5 ;
 
Знаки ? - это специальные маркеры, так называемые placeholders. Они заменяются теми значениями, что перечислены в конце вашей строки.
Но в данном случае их должно быть три, 1-префикс таблицы, которого нет в вашем случае, 2 - значение для апдейта, третье - id изменяемой записи.
 
>>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'
 
Знаки ? - это специальные маркеры, так называемые placeholders. Они заменяются теми значениями, что перечислены в конце вашей строки.
Но в данном случае их должно быть три, 1-префикс таблицы, которого нет в вашем случае, 2 - значение для апдейта, третье - id изменяемой записи.

значения в конце строки это: $update, intval($_POST['saveid']
Но в моем случае еще не указано значение преффикса, так?

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

Добавлено через 8 минут
ясно, но странно...
я добавил в таблицу значение `phone` text
добавил в массив $update запись:
PHP:
'phone' => &$phone

PHP:
CREATE TABLE IF NOT EXISTS `gs_users` ( 
  `id` int(6) unsigned NOT NULL AUTO_INCREMENT, 
  `email` varchar(100) NOT NULL, 
  `pass` varchar(35) NOT NULL, 
  `fpass` varchar(30) DEFAULT NULL, 
  `login` varchar(30) NOT NULL, 
  `tzone` char(6) NOT NULL, 
  `edate` datetime NOT NULL, 
  `mdate` datetime NOT NULL, 
  `cdate` varchar(10) NOT NULL, 
  `logged` int(1) unsigned DEFAULT '0', 
  `firstname` varchar(60) NOT NULL, 
  `lastname` varchar(60) NOT NULL, 
  `bdate` date NOT NULL, 
  `slove` int(2) unsigned DEFAULT '0', 
  `hobbi` text, 
  `work` varchar(250) DEFAULT NULL, 
  `love_music` text, 
  `love_movie` text, 
  `love_books` text, 
  `love_color` text, 
  `i_am` text, 
  `deviz` text, 
  `my_dream` text, 
  `country` varchar(50) DEFAULT NULL, 
  `district` varchar(50) DEFAULT NULL, 
  `city` varchar(50) DEFAULT NULL, 
  `icq` varchar(20) DEFAULT NULL, 
  `views` int(6) unsigned DEFAULT '0', 
  `rating` int(6) DEFAULT '0', 
`phone` text,
  PRIMARY KEY (`id`) 
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=5 ;

Но когда обновляю записи, в поле rating записывается непонятное число, а поле phone остается пустым, хотя значение было введено.

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

Всем спасибо!!
 
Назад
Сверху