За последние 24 часа нас посетил 21971 программист и 1376 роботов. Сейчас ищут 626 программистов ...

Запись в базу mysql

Тема в разделе "PHP для новичков", создана пользователем leohome, 29 апр 2017.

  1. leohome

    leohome Новичок

    С нами с:
    29 апр 2017
    Сообщения:
    9
    Симпатии:
    0
    Почему то все данные попадают в один столбец в таблице.
    Запрос такой.
    PHP:
    1. $sql = mysql_query("INSERT INTO purchases (`materials`, `volume`, `newmaterial`, `cost`, `data`, `store`, `orderok`) VALUES ('$materials'), ('$volume'), ('$newmaterial'), ('$cost'), ('$data'), ('$store'), ('$orderok')");
    Не пойму от чего так происходит
    sql.png
     
    #1 leohome, 29 апр 2017
    Последнее редактирование модератором: 30 апр 2017
  2. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    попробуй вот так:
    PHP:
    1. "INSERT INTO purchases (`materials`, `volume`, `newmaterial`, `cost`, `data`, `store`, `orderok`) VALUES ('$materials', '$volume', '$newmaterial', '$cost', '$data', '$store', '$orderok')"
    вдруг получится...
    --- Добавлено ---
    это всё тупая машина не понимает чего ты от неё хочешь.
    не обращай внимания...
     
  3. leohome

    leohome Новичок

    С нами с:
    29 апр 2017
    Сообщения:
    9
    Симпатии:
    0
    Спасибо, пребывал, и хотелось бы объяснения какого-то а не тупого изменения синтаксиса.
     
  4. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    т е ты пробовал так, как я написал и у тебя не получилось?
     
  5. leohome

    leohome Новичок

    С нами с:
    29 апр 2017
    Сообщения:
    9
    Симпатии:
    0
    Да, точно также пишет на сервере в sql запросе
     
  6. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Вы же значете, что MySQL поддерживает мульти вставку данных? Синтаксис у таких запросов следующий:
    PHP:
    1. INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
    То есть, каждая запись оборачивается круглыми скобками. Если же мы запишем этот запрос так:
    PHP:
    1. INSERT INTO tbl_name (a,b,c) VALUES(1),(4),(7);
    То для "a" у нас есть данные, а поля "b" и "c" примут значения по умолчанию. Теперь сравните этот запрос со своим. ;)
     
  7. Aleksanbr_77

    Aleksanbr_77 Новичок

    С нами с:
    31 янв 2016
    Сообщения:
    115
    Симпатии:
    5
    PHP:
    1. "INSERT INTO purchases (`materials`, `volume`, `newmaterial`, `cost`, `data`, `store`, `orderok`) VALUES ('".$materials."', '".$volume."', '".$newmaterial."','".$cost."', '".$data."', '".$store."', '".$orderok."')"
    иначе мои запросы не срабатывают--пробуй
    отредактировал, сам запутался
     
    #7 Aleksanbr_77, 29 апр 2017
    Последнее редактирование: 29 апр 2017
  8. leohome

    leohome Новичок

    С нами с:
    29 апр 2017
    Сообщения:
    9
    Симпатии:
    0
    а можно на пальцах
    не понял , что к чему
     
  9. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    По ходу, я задействовал все десять пальцев на своих руках.
    Судя по всему, у вас и вывод ошибок отключен. С кавычками в последнем примере разберитесь.
     
  10. leohome

    leohome Новичок

    С нами с:
    29 апр 2017
    Сообщения:
    9
    Симпатии:
    0
    PHP:
    1. INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
    2. $sql = mysql_query("INSERT INTO purchases (`materials`, `volume`, `newmaterial`, `cost`, `data`, `store`, `orderok`) VALUES ('$materials'), ('$volume'), ('$newmaterial'), ('$cost'), ('$data'), ('$store'), ('$orderok')");
    и что не правильно ?
     
    #10 leohome, 29 апр 2017
    Последнее редактирование модератором: 30 апр 2017
  11. Aleksanbr_77

    Aleksanbr_77 Новичок

    С нами с:
    31 янв 2016
    Сообщения:
    115
    Симпатии:
    5
    @Deonis разобрался, исправил
     
  12. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Я не говорил, что не правильно. Это очень даже приемлемый синтаксис для мульти вставки. Но вас же смущает, что
    . Посмотрите еще раз на варианты синтаксиса INSERT-запросов
     
    Aleksanbr_77 нравится это.
  13. leohome

    leohome Новичок

    С нами с:
    29 апр 2017
    Сообщения:
    9
    Симпатии:
    0
    Вы о чем уважаемый ?
    --- Добавлено ---
    Вопрос был ,Почему то все данные попадают в один столбец в таблице
     
  14. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Именно поэтому я его процитировал (не придумал сам!) и еще выше дал на него ответ.
     
  15. leohome

    leohome Новичок

    С нами с:
    29 апр 2017
    Сообщения:
    9
    Симпатии:
    0
    Вопрос@Deonis
    Может Вы и дали ответ, но мне он не понятен (
    --- Добавлено ---
    @Deonis
    VALUES(1,2,3),(4,5,6),(7,8,9);
    Мне не понятно, как я могу записать так свои переменные .
     
  16. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    @leohome, попробуем еще раз.
    PHP:
    1. INSERT INTO tbl_name (a,b,c) VALUES (1,2,3);
    Запишеться одна строка: в поле "a" значение 1, в "b" - значение 2 и в "c" - 3
    PHP:
    1. INSERT INTO tbl_name (a,b,c) VALUES (1,2,3), (4,5,6);
    Запишеться две строки.
    PHP:
    1. INSERT INTO tbl_name (a,b,c) VALUES (1,2,3), (4,5,6), (7,8,9);
    Запишеться три строки.
    А теперь ахтунг!
    PHP:
    1. INSERT INTO tbl_name (a,b,c) VALUES (1), (4), (7);
    Запишеться три строки, НО данные для поля "a" присутствуют, а для полей "b" и "c" их не указали. Поэтому запсиси в БД будут иметь такой вид
    Код (Text):
    1.   a  |   b  |  c
    2. ---------------------
    3.   1  |      |
    4.   4  |      |
    5.   7  |      |
    --- Добавлено ---
    P.S. Задействовал уже одиннадцатый палец :D
     
  17. leohome

    leohome Новичок

    С нами с:
    29 апр 2017
    Сообщения:
    9
    Симпатии:
    0
    Спасибо, завтра посмотрю на Ваш 11 палец.
    Может на примере моем напишете ?))
     
  18. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Ваш изначальный запрос имеет ту же схему, что и мой последний пример. Вам же, как я понимаю, нужна схема, как в первом примере, где идёт вставка одной строки. А такой запрос вам уже написал @TeslaFeo в своём ответе выше.
     
  19. Aleksanbr_77

    Aleksanbr_77 Новичок

    С нами с:
    31 янв 2016
    Сообщения:
    115
    Симпатии:
    5
    @Deonis я когда то создавал тут тему по поводу записи в БД. У меня почему то не срабатывают запросы с синтаксисом как у @TeslaFeo, а проходят только в виде что был мной выше указан, мне просто интересно, от чего это может зависить? я сам просто новичок-любитель
     
  20. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    этого не может быть.
    Тот синтаксис, который ты указал, тоже норм (конкатенация называется).
    Тут нужно понимать, что PHP обращается к базе данных и передает ей строку запроса. БД возвращает результат.
    Нет никакой разницы, каким макаром ты сформируешь эту строку.
    Главное, чтобы в итоге получился запрос, понятный для СУБД.
     
  21. Aleksanbr_77

    Aleksanbr_77 Новичок

    С нами с:
    31 янв 2016
    Сообщения:
    115
    Симпатии:
    5
    @TeslaFeo значит это зависит от версии mysql ? периодически их меняю, и всё пытаюсь отправить запрос без этой кучи кавычек, но тру получается только в том случае, если каждая переменная заключена в кавычки именно таким образом, пробовал уже неоднократно и мне интересно, чего у кого то код написан так без этого гемора и все работает! ищу причину
     
  22. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    PHP:
    1. $a = "SELECT * ";
    2. $b = "FROM tb_name";
    3. $query1 = "SELECT * FROM tb_name";
    4. $query2 = "SELECT * $b";
    5. $query3 = "SELECT * ".$b;
    6. $query4 = $a.$b;
    переменные $query1, $query2, $query3 и $query4 будут содержать одну и ту же строку.
     
  23. Aleksanbr_77

    Aleksanbr_77 Новичок

    С нами с:
    31 янв 2016
    Сообщения:
    115
    Симпатии:
    5
    и тем не менее, причем в моем случае это касается только INSERT INTO-запросов в VALUES , только что проверил, дает фолс
     
  24. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    выложи строку кода полностью
     
  25. Aleksanbr_77

    Aleksanbr_77 Новичок

    С нами с:
    31 янв 2016
    Сообщения:
    115
    Симпатии:
    5
    PHP:
    1. $success=$mysqli->query( "INSERT INTO  `$table` (`user_name` ,`ip` ,`data` ,`time`)
    2.            VALUES ('".$user_name."','".$ip."','".$data."','".$time."')");
    так запрос проходит, а
    PHP:
    1. $success=$mysqli->query( "INSERT INTO  `$table` (`user_name` ,`ip` ,`data` ,`time`)
    2.            VALUES ('$user_name','$ip,'$data','$time')");
    даёт фолс
    --- Добавлено ---
    @TeslaFeo но я к этому уже приспособился, может подскажешь тут?https://php.ru/forum/threads/funkcija-substr-i-ee-rabota.63293/#post-514808