Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Mysql какой то хитрый баг?
цитата
23/06/13 в 18:38
 Guest
первый раз с таким сталкиваюсь -
табличка table1 с полями field1 и field2
поле у field1 атрибуты not null, значения по умолчанию НЕТ
делаю запрос
insert into table1 set field2='blablabla'
вставляет сцуко... ни слова что первое поле не определено,
если field1 строковое - вставляет пустую строку
если field1 числовое вставляет 0
куда копать?
попробовал на др. серваке - таже фигня, это что, нормально?
icon_sad.gif

зы похоже дело в DONT_USE_DEFAULT_FIELDS ...
цитата
23/06/13 в 19:53
 Pentarh
Если нет дефолтного и not null, то на запрос инсерт с пропуском поля должно материться. Точно нет? В SHOW CREATE TABLE?
цитата
23/06/13 в 21:20
 AWD
ну превед, мускуль то небось 5 а не 3...
по умолчанию он вставит значение максимально близкое к заданному.
если пусто - для INT это 0, для TEXT это "" - пустая строка.
попробуй в числовое вставь '123jhgjhg' - хочешь ругни? ее не будет! будет 123 (если, конечно, вставлять "йцу123йцу" - будет 0)
они просто облегчили тебе жизнь, чтоб ты не матерился вместе с ним, когда где-то упустишь колумн. а прикинь, у тебя мегапрога, в 100500 местах есть инсерты. и тут ты альтер тейбл добавляешь колумн нот нул... и что, теперь бегать по всем местам, где идут инсерты и поправлять с учетом на мелкую доработку? танунах. имхо, логично.
Удачи!
цитата
23/06/13 в 21:27
 Pentarh
Тогда это тупорылая фича. Так быть не должно.
цитата
23/06/13 в 21:37
 Guest
AWD писал:
ну превед, мускуль то небось 5 а не 3...
по умолчанию он вставит значение максимально близкое к заданному.
если пусто - для INT это 0, для TEXT это "" - пустая строка.
попробуй в числовое вставь '123jhgjhg' - хочешь ругни? ее не будет! будет 123 (если, конечно, вставлять "йцу123йцу" - будет 0)
бл... есть такая х...ня
варнинг выдает, но и вставку прозводит
слов нет
они всю валидацию данных отдали на клиент чтоли...
цитата
23/06/13 в 21:40
 Guest
AWD писал:
имхо, логично.
Удачи!

как эта "фича" отключается?
цитата
23/06/13 в 22:15
 AWD
Pentarh писал:
Тогда это тупорылая фича. Так быть не должно.
ну да, мускуль же тупицы пишут)) я свое мнение сказал - мне так кажется удобным и логичным. и так же мне удобно, когда я INT могу передать как строку - '321'. вот, передаешь ты форму, где поля соответствуют колонкам в базе. и что я делаю - беру и хуячу в цикле
for($_POST as $key=>$val)
$sql .= "$key='$val'";
ну, дальше понятно, insert into table set implode(',', $sql);
грубо, но все-же.
а если строго следовать букве _устаревшего_ "закона" - ебанешься проверять и прописывать все то, что я записал в 2 строки.
дело хозяйское, не хочешь вставлять - проверяй перед вставкой, выдай варнинг, но никак не ошибку мускуля с засветом для хакера и т.д.
Guest писал:
как эта "фича" отключается?
http://habrahabr.ru/post/166411/
короче, так: SET sql_mode = 'TRADITIONAL';
цитата
23/06/13 в 22:21
 Pentarh
Вообще то лучше использовать activerecord/portable data objects. Там он уже разбирается что брать в кавычку, что не брать.
цитата
23/06/13 в 22:28
 AWD
ну, юзать чужие дыры и баги - дело личное. я ни PDO не юзаю, ни Smarty и т.д. - зачем мне писать
Код:
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET sql_mode = 'TRADITIONAL'");

если можно Код:
mysql_query("SET sql_mode = 'TRADITIONAL'");

тупо в 2 раза короче и в 6 понятнее. в чем прикол?
ну да ладно, каждый заблуждается в меру своих возможностей smail54.gif
цитата
24/06/13 в 00:21
 CABMIT
AWD писал:
зачем мне писать

затем

Цитата:
Данное расширение устарело, начиная с версии PHP 5.5.0, и будет удалено в будущем. Используйте вместо него MySQLi или PDO_MySQL
цитата
24/06/13 в 00:55
 AWD
CABMIT писал:
тю, блять. пукнул так пукнул. давай допишу букву.
mysqli_query. доволен?
а хуле ты не пишешь, что это
Код:
insert into table set implode(',', $sql);
вообще не сработает. тут тебе не mysql, не mysqli нету - целое поле попукать. заебали посты набивать не по делу вообще.
выпей чаю, да съешь еще булочек французских... -1
цитата
24/06/13 в 03:02
 idk2045
Guest писал:
куда копать?
попробовал на др. серваке - таже фигня, это что, нормально?


хм, было бы странно если бы было иначе)
с какого перепугу оно должно ругаться на пустое поле? если логически думать.

вообще помню несколько лет назад была такая фича как strict mode в mysql. не знаю, осталась ли сейчас. вот там оно ругалось на все что можно помню, это пиздец как бесило, я ее первым делом отключал всегда icon_wink.gif
цитата
24/06/13 в 05:00
 Pentarh
AWD писал:
тю, блять. пукнул так пукнул. давай допишу букву.
mysqli_query. доволен?
а хуле ты не пишешь, что это
Код:
insert into table set implode(',', $sql);
вообще не сработает. тут тебе не mysql, не mysqli нету - целое поле попукать. заебали посты набивать не по делу вообще.
выпей чаю, да съешь еще булочек французских... -1

Это ты тут воняешь своим быдлокодом - не продохнуть
Код:
беру и хуячу в цикле
for($_POST as $key=>$val)
$sql .= "$key='$val'";

А кодировки? А квотинг? А нахуя кавычки лишние? Твой код воняет багами за километр. Так что чия бы мычала, молчи в тряпочку. mysqli_query тоже чужой баговый код между прочим. Как и весь пхп.
цитата
24/06/13 в 16:06
 AWD
Pentarh писал:
А кодировки? А квотинг? А нахуя кавычки лишние?
бля, ну ты, даешь. это был _пример_. нахуя мне еще писать квотинг и кодировки? (вопрос риторический. и так понятно, что ты просто психопат-истеричка)

ты уже проявил свое незнание и непонимание мускуля, топикстартеру не помог, а вводил в заблуждение, так что сам в тряпочку кашляй своей саркомой..
ты перешел на личности, оскорбляешь меня. я б тебя обхуесосил, но решил не уподобляться быдлу.
я сейчас мимо церкви проходить буду, поставлю за тебя свечку...

Последний раз редактировалось: AWD (24/06/13 в 16:15), всего редактировалось 4 раз(а)
цитата
24/06/13 в 16:07
 AWD
del
цитата
24/06/13 в 16:39
 Дартаньян
AWD: ты чё такой злой?
цитата
24/06/13 в 17:31
 AWD
Дартаньян писал:
AWD: ты чё такой злой?
а пентарх, значит, добрый?))) ну где справедливость?)))
это я раньше злой был, когда бухал. теперь не бухаю.
пойду ка я отсюда. как всегда - поможешь человеку - и на тебе, кто то обязательно начнет тупить и оскорблять. как будто он разработчик пдо. да мне похуй на пдо и на лучи поноса пентарха особенно.
всем мир.
надеюсь, на мастер не зайду очень долго, ибо наказуемо)))
лучше пойду в лес курну шмали с друзьями.
цитата
24/06/13 в 17:45
 AWD
а ну, давай, пентарх-сотонарх, скажи, где здесь лишние кавычки, иначе лохом и останешься
Код:
беру и хуячу в цикле
for($_POST as $key=>$val)
  $sql .= "$key='$val'";
ну, дальше понятно, insert into table set implode(',', $sql);
я тут по быстрому ошибся, вместо $sql .= нужно было написать $sql[] =
короче, все, ушел с форума...

Последний раз редактировалось: AWD (24/06/13 в 20:18), всего редактировалось 1 раз
цитата
24/06/13 в 19:33
 Дартаньян
AWD: ну не знаю как нажрешьси так добрее чем ты тут никого нет, а как трезвый жуть.
цитата
24/06/13 в 20:52
 Guest
ни разу до этого не встречал ситуации когда в поле типа int можно строку запихнуть, вставки не должно произойти
тоже самое - поле не указано явно, значит нулл, если атребует "не нул" - ошибка должна быть...
меня совсем не радует что необходимо на клиента валидаторы сейчас накручивать в код
надежда только что при сборке мускула это "продуманность" поотключать можно


Эта страница в полной версии