За последние 24 часа нас посетили 36760 программистов и 7744 робота. Сейчас ищут 1792 программиста ...

Записать массив в БД

Тема в разделе "PHP для новичков", создана пользователем Шамсутдин, 22 окт 2022.

  1. Шамсутдин

    Шамсутдин Новичок

    С нами с:
    22 окт 2022
    Сообщения:
    5
    Симпатии:
    0
    Доброго времени суток, Уважаемые программисты! Помогите пожалуйста решить!)
    Есть массив с данными :
    $arr = (
    [0] => 22
    [1] => Array
    (
    [0] => good1.jpg
    [1] => good5.jpg
    )

    [2] => Array
    (
    [0] => Ножик
    [1] => Ножик
    )

    [3] => Array
    (
    [0] => 15000
    [1] => 300
    )

    [4] => Array
    (
    [0] => 15000
    [1] => 300
    )

    [5] => Array
    (
    [0] => 1
    [1] => 1
    )
    )

    Необходимо все данные записать в БД
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    753
    Адрес:
    Татарстан
    Покажите ваши наработки
     
  3. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    947
    Симпатии:
    147
    тут в биде запИсать надо, какие наработки
     
  4. Шамсутдин

    Шамсутдин Новичок

    С нами с:
    22 окт 2022
    Сообщения:
    5
    Симпатии:
    0
    $arr = [];
    //Заполняем конечный массив для внесения в БД
    array_push($arr, $img, $name, $price, $price2, $count);

    $arr = implode(", ", $arr);
    $result3 = $mysql->query("INSERT INTO `cart_good` (`idd`, `img`, `name`, `price`, `price2`, `count`) VALUES ($arr)");
     
  5. Шамсутдин

    Шамсутдин Новичок

    С нами с:
    22 окт 2022
    Сообщения:
    5
    Симпатии:
    0
    array_push($arr, $img, $name, $price, $price2, $count);

    $images = implode(", ", $arr[0]);
    $names = implode(", ", $arr[1]);
    $prices = implode(", ", $arr[2]);
    $prices2 = implode(", ", $arr[3]);
    $counts = implode(", ", $arr[4]);

    $result3 = $mysql->query("INSERTINTO `cart_good` (`idd`, `img`, `name`, `price`, `price2`, `count`) VALUES ('$idd', '$images', '$names', '$prices', '$prices2', '$counts')");

    Данный код записывает в БД в одну строку, а надо чтобы записывала в нужное количество строк, так как в каждом массиве ($arr[0] ...) есть n количество значений, помогите пожалуйста. Спасибо.
     
  6. Drunkenmunky

    Drunkenmunky Старожил

    С нами с:
    12 авг 2020
    Сообщения:
    1.511
    Симпатии:
    284
    PHP:
    1. <?php
    2. $data = array(array('int1', 'str1', 'str1'),
    3.               array('int2', 'str2', 'str2'),
    4.               array('int3', 'str3', 'str3'),
    5.               array('int4', 'str4', 'str4'),
    6.               array('int5', 'str5', 'str5'));
    7.  
    8. $sql = "INSERT IGNORE INTO `table` (`col1`, `col2`, `col3`) VALUES ";
    9.  
    10. $values_format = "('%s', '%s', '%s'), ";
    11.  
    12. foreach($data as $values)
    13. {
    14.     $sql .= vsprintf($values_format, $values);
    15. }
    16.  
    17. $sql = rtrim($sql, ', '). ';';
    18.  
    19. echo $sql;
    20. ?>
    ##собрать sql запрос
     
  7. Шамсутдин

    Шамсутдин Новичок

    С нами с:
    22 окт 2022
    Сообщения:
    5
    Симпатии:
    0
    Вывовдит строку как положенно но вот не записывает в БД и выдает ошибку <b>Fatal error</b>: Uncaught mysqli_sql_exception: Column count doesn't match value count at row 1 in C:\xampp\htdocs\Kazbek\php\function\zakaz.php:88
     
  8. Drunkenmunky

    Drunkenmunky Старожил

    С нами с:
    12 авг 2020
    Сообщения:
    1.511
    Симпатии:
    284
    Приведите пример массива
    В таком же виде, как в примере выше
     
  9. Шамсутдин

    Шамсутдин Новичок

    С нами с:
    22 окт 2022
    Сообщения:
    5
    Симпатии:
    0
    Array
    (
    [0] => Array
    (
    [0] => good1.jpg
    [1] => good5.jpg
    )

    [1] => Array
    (
    [0] => Ножик
    [1] => Ножик
    )

    [2] => Array
    (
    [0] => 15000
    [1] => 300
    )

    [3] => Array
    (
    [0] => 15000
    [1] => 300
    )

    [4] => Array
    (
    [0] => 1
    [1] => 1
    )

    ) Вот такой массив
     
  10. Drunkenmunky

    Drunkenmunky Старожил

    С нами с:
    12 авг 2020
    Сообщения:
    1.511
    Симпатии:
    284
    PHP:
    1. <?php
    2. $data = array(array('int1', 'str1'), //по два элемента
    3.               array('int2', 'str2'),
    4.               array('int3', 'str3'),
    5.               array('int4', 'str4'),
    6.               array('int5', 'str5'));
    7. $sql = "INSERT IGNORE INTO `table` (`col1`, `col2`) VALUES "; //в две колонки
    8. $values_format = "('%s', '%s'), "; //по два элемента
    9. foreach($data as $values)
    10. {
    11.     $sql .= vsprintf($values_format, $values);
    12. }
    13. $sql = rtrim($sql, ', '). ';';
    14. echo $sql;
    15. ?>
     
  11. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    947
    Симпатии:
    147
    ТС, теперь почитай об SQL-инъекциях и постарайся избегать такого кода.
     
    Volonter нравится это.
  12. Drunkenmunky

    Drunkenmunky Старожил

    С нами с:
    12 авг 2020
    Сообщения:
    1.511
    Симпатии:
    284
    Это какого "такого"?
    Где-то в его задаче упомянуто, что данные из ненадежного источника?
     
    Volonter нравится это.
  13. Volonter

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

    С нами с:
    8 авг 2009
    Сообщения:
    68
    Симпатии:
    0
    Адрес:
    Москва
    Как говорится, тема в тему, как раз то что сейчас нужно. Подскажите, а как вот такой массив привести к такому же виду, как у топикстартера?
    PHP:
    1. (
    2.     [0] => Array
    3.         (
    4.             [product_id] => 9
    5.             [category_id] => Array
    6.                 (
    7.                     [0] => 2
    8.                     [1] => 15
    9.                 )
    10.  
    11.         )
    12.  
    13.     [1] => Array
    14.         (
    15.             [product_id] => 10779
    16.             [category_id] => Array
    17.                 (
    18.                     [0] => 1389
    19.                 )
    20.  
    21.         )
    22.  
    23. )
    то есть, мне нужно получить вот такое
    PHP:
    1. (
    2.     [0] => Array
    3.         (
    4.             [0] => 9
    5.             [1] => 2
    6.         )
    7.  
    8.     [1] => Array
    9.         (
    10.             [0] => 9
    11.             [1] => 15
    12.         )
    13.  
    14.     [2] => Array
    15.         (
    16.             [0] => 10779
    17.             [1] => 1389
    18.         )
    19.  
    20. )
    Пока самый лучший, но незаконченный результат получился вот из такого кода
    PHP:
    1. foreach ($array as $key => $value){
    2.     foreach($value['category_id'] as $k => $cats){
    3.         $arr[$key][] = $cats;
    4.         foreach($arr as $r => $res){
    5.             $result[][] = $value['product_id'];
    6.         }
    7.     }
    8. }
    но это не то, что нужно.
    Заранее благодарю!
     
  14. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    753
    Адрес:
    Татарстан
    непонятно какого вида вы хотите получить конечный массив... приведите пример
    ... в целом подход верный...циклы в циклах
     
  15. Volonter

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

    С нами с:
    8 авг 2009
    Сообщения:
    68
    Симпатии:
    0
    Адрес:
    Москва
    Так а есть же пример в моем вопросе, под фразой "то есть, мне нужно получить вот такое"
    Цикл в циклах я понимаю, но дальше третьего цикла все, ничего не получается, второй день мучаюсь
     
  16. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    753
    Адрес:
    Татарстан
    PHP:
    1. $result= [];
    2. foreach ($array as $value){
    3.     foreach($value['category_id'] as $cats){
    4.             $result[] . = [$cats, $value['product_id']];
    5.     }    
    6. }
    как-то так
     
    Volonter нравится это.
  17. Volonter

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

    С нами с:
    8 авг 2009
    Сообщения:
    68
    Симпатии:
    0
    Адрес:
    Москва
    Супер, спасибо!
    только строку 4 немного допиливать надо
    PHP:
    1. $result[] = [$value['product_id'], $cats];
    без точки и элементы наоборот, а так все здорово, еще раз спасибо!
     
  18. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    753
    Адрес:
    Татарстан
    Volonter нравится это.
  19. Volonter

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

    С нами с:
    8 авг 2009
    Сообщения:
    68
    Симпатии:
    0
    Адрес:
    Москва
    Понял, спасибо!