За последние 24 часа нас посетил 16781 программист и 1644 робота. Сейчас ищет 941 программист ...

Подготовка SQL перед выполнением

Тема в разделе "PHP для новичков", создана пользователем blbulyandavbulyan, 7 июн 2018.

  1. blbulyandavbulyan

    blbulyandavbulyan Новичок

    С нами с:
    12 май 2017
    Сообщения:
    16
    Симпатии:
    0
    Итак имею следующий код:
    PHP:
    1. <!DOCTYPE html>
    2. <html lang="ru">
    3.     <head>
    4.         <meta charset="UTF-8">
    5.     </head>
    6.     <body>
    7.         <?php
    8.             require 'config/db.php';
    9.             if(isset($_POST['submit'])){
    10.                 if($db->connect_errno){/*Проверка на ошибки подлючения к БД*/
    11.                     $error_text = "<div class=\"error\" id=\"error_connection\">Исключение в функции GenerateCategoryOutput: не удалось подключиться к MySQL: (" . $db->connect_errno . ") " . $db->connect_error . "</div>";
    12.                     die($error_text);
    13.                 }
    14.                 $category_name = $_POST['category-name'];
    15.                 $subcategory_name = $_POST['subcategory-name'];
    16.                 $subsubcategory_name = $_POST['subsubcategory-name'];
    17.                 $channel_name = $_POST['channel-name'];
    18.                 $channel_description = $_POST['channel-description'];
    19.                 $channel_link = $_POST['channel-link'];
    20.                 /*Подготовка SQL запросов*/
    21.                
    22.                 $PRE_category_id = $db->prepare("SELECT `CategoryID` FROM `categories` WHERE `CategoryName` = ?");
    23.                 $PRE_subcategory_id = $db->prepare("SELECT `SubcategoryID` FROM `subcategories` WHERE `SubcategoryName` = ?");
    24.                 $PRE_subsubcategory_id = $db->prepare("SELECT `SubsubcategoryID`  FROM `subsubcategories` WHERE `SubsubcategoryName` = ?");
    25.                 $PRE_add_channel = $db->prepare("INSERT INTO `channels`(`CategoryID`, `SubcategoryID`, `ChannelName`, `ChannelLink`, `Description`)VALUES(?, ?, ?, ?, ?)");
    26.                 $PRE_category_id->bind_param('s', $category_name);
    27.                 $PRE_subcategory_id->bind_param('s', $subcategory_name);
    28.                 $PRE_subsubcategory_id->bind_param('s', $subsubcategory_name);
    29.                 $PRE_category_id->execute();
    30.                 $PRE_subcategory_id->execute();
    31.                 $PRE_subsubcategory_id->execute();
    32.                 $PRE_category_id->bind_result($category_id);
    33.                 $PRE_subcategory_id->bind_result($subcategory_id);
    34.                 $PRE_subsubcategory_id->bind_result($subsubcategory_id);
    35.                 $PRE_category_id->fetch();
    36.                 $PRE_subcategory_id->fetch();
    37.                 $PRE_subsubcategory_id->fetch();
    38.                 $PRE_add_channel->bind_param('iisss', $category_id, $subcategory_id, $channel_name, $channel_link, $channel_description);
    39.                 $PRE_add_channel->execute();
    40.                 $PRE_add_channel->fetch();
    41.             }
    42.         ?>
    43.         <form method="POST">
    44.             <input type="text" name="category-name" placeholder="Имя категории">
    45.             <input type="text" name="subcategory-name" placeholder="Имя подкатегории">
    46.             <input type="text" name="subsubcategory-name" placeholder="Имя подподкатегории">
    47.             <input type="text" name="channel-name" placeholder="Имя канала">
    48.             <input type="text" name="channel-description" placeholder="Описание канала">
    49.             <input type="text" name="channel-link" placeholder="Ссылка на канал">
    50.             <input type="submit" name="submit" placeholder="Добавить">
    51.         </form>
    52.     </body>
    53. </html>
    По идее он должен добавлять запись в БД, но ничего не работает, вот что пишет в логах:
    Код (Text):
    1.  
    2. [Thu Jun 07 17:13:23.440583 2018] [php7:warn] [pid 27885] [client 192.168.1.50:1873] PHP Warning:  mysqli_stmt::bind_param(): invalid object or resource mysqli_stmt\n in /var/www/html/blbulyandavbulyan.net/addchannel.php on line 41, referer: https://blbulyandavbulyan.net/addchannel.php
    3. [Thu Jun 07 17:13:23.440733 2018] [php7:warn] [pid 27885] [client 192.168.1.50:1873] PHP Warning:  mysqli_stmt::execute(): invalid object or resource mysqli_stmt\n in /var/www/html/blbulyandavbulyan.net/addchannel.php on line 42, referer: https://blbulyandavbulyan.net/addchannel.php
    4. [Thu Jun 07 17:13:23.440773 2018] [php7:warn] [pid 27885] [client 192.168.1.50:1873] PHP Warning:  mysqli_stmt::fetch(): invalid object or resource mysqli_stmt\n in /var/www/html/blbulyandavbulyan.net/addchannel.php on line 43, referer: https://blbulyandavbulyan.net/addchannel.php
    5. [Thu Jun 07 17:13:31.793500 2018] [php7:warn] [pid 31746] [client 192.168.1.50:1879] PHP Warning:  mysqli_stmt::bind_param(): invalid object or resource mysqli_stmt\n in /var/www/html/blbulyandavbulyan.net/addchannel.php on line 41, referer: https://blbulyandavbulyan.net/addchannel.php
    6. [Thu Jun 07 17:13:31.793660 2018] [php7:warn] [pid 31746] [client 192.168.1.50:1879] PHP Warning:  mysqli_stmt::execute(): invalid object or resource mysqli_stmt\n in /var/www/html/blbulyandavbulyan.net/addchannel.php on line 42, referer: https://blbulyandavbulyan.net/addchannel.php
    7. [Thu Jun 07 17:13:31.793701 2018] [php7:warn] [pid 31746] [client 192.168.1.50:1879] PHP Warning:  mysqli_stmt::fetch(): invalid object or resource mysqli_stmt\n in /var/www/html/blbulyandavbulyan.net/addchannel.php on line 43, referer: https://blbulyandavbulyan.net/addchannel.php
    Я прикреплю SQL файл структуры БД, без такой структуры БД скрипт не сможет работать вообще.
    MySQL 5.7.22
    PHP: 7.1.17
    Apache: 2.4
     

    Вложения:

    • tables.zip
      Размер файла:
      1,5 КБ
      Просмотров:
      0
  2. username

    username Новичок

    С нами с:
    6 июл 2017
    Сообщения:
    223
    Симпатии:
    17
    в вашем случае можно попробовать снабдить код комментариями, сделать его более понятным
     
  3. blbulyandavbulyan

    blbulyandavbulyan Новичок

    С нами с:
    12 май 2017
    Сообщения:
    16
    Симпатии:
    0
    Ну вот:
    PHP:
    1. <!DOCTYPE html>
    2. <html lang="ru">
    3.     <head>
    4.         <meta charset="UTF-8">
    5.     </head>
    6.     <body>
    7.         <?php
    8.             require 'config/db.php';
    9.             if(isset($_POST['submit'])){
    10.                 if($db->connect_errno){/*Проверка на ошибки подлючения к БД*/
    11.                     $error_text = "<div class=\"error\" id=\"error_connection\">Исключение в функции GenerateCategoryOutput: не удалось подключиться к MySQL: (" . $db->connect_errno . ") " . $db->connect_error . "</div>";
    12.                     die($error_text);
    13.                 }
    14.                 $category_name = $_POST['category-name'];
    15.                 $subcategory_name = $_POST['subcategory-name'];
    16.                 $subsubcategory_name = $_POST['subsubcategory-name'];
    17.                 $channel_name = $_POST['channel-name'];
    18.                 $channel_description = $_POST['channel-description'];
    19.                 $channel_link = $_POST['channel-link'];
    20.                 /*Подготовка SQL запросов*/
    21.                
    22.                 $PRE_category_id = $db->prepare("SELECT `CategoryID` FROM `categories` WHERE `CategoryName` = ?");//sql запрос для получения ИД категории по её имени
    23.                 $PRE_subcategory_id = $db->prepare("SELECT `SubcategoryID` FROM `subcategories` WHERE `SubcategoryName` = ?");//sql запрос для получения ИД подкатегории по её имени
    24.                 $PRE_subsubcategory_id = $db->prepare("SELECT `SubsubcategoryID`  FROM `subsubcategories` WHERE `SubsubcategoryName` = ?");//sql запрос для получения ИД подподкатегории по её имени
    25.                 $PRE_add_channel = $db->prepare("INSERT INTO `channels`(`CategoryID`, `SubcategoryID`, `SubsubcategoryID` ,`ChannelName`, `ChannelLink`, `Description`)VALUES(?, ?, ?, ?, ?, ?)");// sql запрос для добавления канала
    26.                 // для добавления канала требуеться знать ИД категории, ИД подкатегории , ИД подподкатегории
    27.                 $PRE_category_id->bind_param('s', $category_name);
    28.                 $PRE_subcategory_id->bind_param('s', $subcategory_name);
    29.                 $PRE_subsubcategory_id->bind_param('s', $subsubcategory_name);
    30.                 $PRE_category_id->execute();
    31.                 $PRE_subcategory_id->execute();
    32.                 $PRE_subsubcategory_id->execute();
    33.                 $PRE_category_id->bind_result($category_id);
    34.                 $PRE_subcategory_id->bind_result($subcategory_id);
    35.                 $PRE_subsubcategory_id->bind_result($subsubcategory_id);
    36.                 $PRE_category_id->fetch();
    37.                 $PRE_subcategory_id->fetch();
    38.                 $PRE_subsubcategory_id->fetch();
    39.                 $PRE_add_channel->bind_param('iisss', $category_id, $subcategory_id, $subsubcategory_id, $channel_name, $channel_link, $channel_description);
    40.                 $PRE_add_channel->execute();
    41.                 $PRE_add_channel->fetch();
    42.             }
    43.         ?>
    44.         <form method="POST">
    45.             <input type="text" name="category-name" placeholder="Имя категории">
    46.             <input type="text" name="subcategory-name" placeholder="Имя подкатегории">
    47.             <input type="text" name="subsubcategory-name" placeholder="Имя подподкатегории">
    48.             <input type="text" name="channel-name" placeholder="Имя канала">
    49.             <input type="text" name="channel-description" placeholder="Описание канала">
    50.             <input type="text" name="channel-link" placeholder="Ссылка на канал">
    51.             <input type="submit" name="submit" placeholder="Добавить">
    52.         </form>
    53.     </body>
    54. </html>
     
  4. username

    username Новичок

    С нами с:
    6 июл 2017
    Сообщения:
    223
    Симпатии:
    17
  5. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @blbulyandavbulyan, проверьте значение $PRE_add_channel после "подготовки"