За последние 24 часа нас посетили 52037 программистов и 1763 робота. Сейчас ищут 895 программистов ...

Взбесилась БД!

Тема в разделе "PHP для новичков", создана пользователем Hawk, 15 янв 2008.

  1. Hawk

    Hawk Активный пользователь

    С нами с:
    30 авг 2007
    Сообщения:
    201
    Симпатии:
    0
    Адрес:
    Беларусь
    Подскажите что может быть не так:
    создаю таблицу:
    [sql] CREATE TABLE `test` (id INT AUTO_INCREMENT PRIMARY KEY NOT NULL, test TEXT)CHARACTER SET cp1251
    [/sql]


    Потом делаю запрос например такой:
    [sql] INSERT INTO `test` SET `id`='NULL', `test`='ss';
    [/sql]


    Он работает. Делаю этот же запрос через php:
    PHP:
    1. <?php
    2.  $quire = 'INSERT INTO `test` SET `id`="NULL", `test`="ss"';
    3.      mysql_query($quire) or die(mysql_error());
    4.  ?>
    5.  

    Он не работает, пишет:
    Incorrect integer value: 'NULL' for column 'id' at row 1
    подставляю вместо NULL число срабатывает, в чем беда? Ведь он создан как INT AUTO_INCREMENT PRIMARY KEY и когда шлешь NULL то должен сам подставлять число, тем более что когда без php, а на прямую к базе этот запрос то все работает, может чтото с настройками php?
     
  2. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    0) учиться соображать что пишешь и почему. И почему при копировании запроса он у тебя изменяется.
    1) курить кавычки.
    2) курить что такое AUTO_INCREMENT и зачем он нужен.
     
  3. Hawk

    Hawk Активный пользователь

    С нами с:
    30 авг 2007
    Сообщения:
    201
    Симпатии:
    0
    Адрес:
    Беларусь
    1)кавычки я уже ставил и так и сяк никак не работает
    PHP:
    1. $quire = "INSERT INTO `test` SET `id`='NULL', `test`='ss'";
    так тоже не работает пишет Incorrect integer value: 'NULL' for column 'id' at row 1
    тут суть не в кавычках!
    2)Я знаю что такое AUTO_INCREMENT и знаю зачем он нужен, я бы врядли им пользовался бы если бы не знал...!

    но от этого скрипт не начал работать...
     
  4. eduha

    eduha Активный пользователь

    С нами с:
    8 ноя 2006
    Сообщения:
    278
    Симпатии:
    0
    Адрес:
    Караганда
    После соединения с БД выполните запрос
    [sql]SET sql_mode = ''[/sql]
     
  5. Hawk

    Hawk Активный пользователь

    С нами с:
    30 авг 2007
    Сообщения:
    201
    Симпатии:
    0
    Адрес:
    Беларусь
    Удалил `id`='NULL' из запроса все стало работать.
    Но догнать не могу почему при обращении к базе напрямую работает с `id`='NULL' а из php не работает!
    Раньше всегда вставлял `id`='NULL' и все работало, а недавно переставил пхп первый раз после установки к базе обратился и вот такая вот ерунда... вот я и думал может есть какие настройки хитрые...
     
  6. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    > Incorrect integer value: 'NULL' for column 'id' at row 1
    русским же языком написано, что строку нельзя записать в целочисленное поле :)
     
  7. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
  8. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    CREATE TABLE `test` (id INT AUTO_INCREMENT PRIMARY KEY NOT NULL, test TEXT)CHARACTER SET cp1251

    тебя не смущает что ты задаешь id как INT и NOT NULL (не NULL!) и тут же пытаешься ему присвоить строку и "Null"!

    я вообще чайник в базах но ЭТО очевидно!
     
  9. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    ты даже не представляешь какой ты чайник :)
    если передан нулл, то ставится дефолтное значение. если дефолтное значение не задано, то нулл. если в поле нельзя поставить нулл - генерируется ошибка. для автоинкремента всегда есть дефолтное значение - на один больше чем последний созданный id.
     
  10. Hawk

    Hawk Активный пользователь

    С нами с:
    30 авг 2007
    Сообщения:
    201
    Симпатии:
    0
    Адрес:
    Беларусь
    dark-demon вот верно! так в том и суть что при указании команды прямо к БД работало, а из пхп нет! вот в чем был вопрос...
     
  11. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    dark-demon
    Так а смысл передавать NULL "если в поле нельзя поставить нулл"?! Что бы поставить дефолтное значение?! ИМХО тогда проще вообще ничего не передавать!

    Hawk
    id='NULL' - записывает строку "NULL"
    id=NULL - записывает значение "NULL" (т.е. значене не определено)!
     
  12. Anonymous

    Anonymous Guest

    Нет смысла. В этом конкретном случае. О чем ему и сказали.
     
  13. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    имхо, иногда, если запрос длинный, чем перечислять кучу пар имя/значение, проще на автоинкрементном поле NULL передать.