Member 13387451 Ответов: 2

Предупреждение: mysqli_free_result () ожидает, что параметр 1 будет mysqli_result, логическое значение задано...


Эй, я новичок в mysql, и у меня возникли проблемы с добавлением информации в базу данных. Ошибка " данные не вставлены предупреждение: mysqli_free_result () ожидает, что параметр 1 будет mysqli_result, логическое значение задано в... в строке 56. Как я могу это исправить? Спасибо.



<?php

// php code to Insert data into mysql database from input text
if(isset($_POST['submit']))
{
    $hostname = "localhost";
    $username = "";
    $password = "";
    $databaseName = "";
    
    // get values form input text and number

   $title = $_POST['title'];
   $first_name = $_POST['first_name'];
   $surname = $_POST ['surname'];
   $gender = $_POST ['gender'];
   $dob = $_POST ['dob'];
   $street_address = $_POST ['street_address'];
   $suburb = $_POST ['suburb'];
   $state = $_POST ['state'];
   $home_phone = $_POST ['home_phone'];
   $mobile_phone = $_POST ['mobile_phone'];
   $work_phone = $_POST ['work_phone'];
   $email = $_POST ['email'];
   $martial_status = $_POST ['martial_status'];
   $occupation = $_POST ['occupation'];
   $parent_name = $_POST ['parent_name'];
   $preferred_dr = $_POST ['preferred_dr'];
   $medicare_no = $_POST ['medicare_no'];
   
   //$allergies = $_POST ['allergies'];
   //$postcode = $_POST ['postcode'];
    // connect to mysql database using mysqli

    $connect = mysqli_connect($hostname, $username, $password, $databaseName);
    
    // mysql query to insert data

   $query = "INSERT INTO `Patient Details Table` (`Title`, `First Name`, `Surname`, `Gender`, `D.O.B`, `Street Address`, `Suburb`, `State`, `Home Phone`, `Mobile Phone`, `Work Phone`, `Email`, `Martial Status`, `Occupation`, `Parent Name`, `Preferred Dr`, `Medicare No.`) VALUES ('$title', '$first_name', '$surname', '$gender', '$dob', '$street_address', '$suburb' '$state', '$home_phone', '$mobile_phone', '$work_phone', '$email', '$martial_status', '$occupation', '$parent_name', '$preferred_dr', '$medicare_no')";
   //$query = "INSERT INTO `Postcode Table` (`Suburb`, `Postcode`) VALUES ('$suburb', '$postcode')";
   //$query = "INSERT INTO `Allergy Table` (`Allergy`) VALUES ('$allergies')";

    $result = mysqli_query($connect,$query);
    
    // check if mysql query successful

    if($result)
    {
        echo 'Data Inserted';
    }
    
    else{
        echo 'Data Not Inserted';
    }
    
    mysqli_free_result($result);
    mysqli_close($connect);
}

?>


Что я уже пробовал:

Первоначально код был снят с видео о том, как добавлять введенную информацию в базы данных. Я сделал несколько изменений, чтобы он соответствовал моим потребностям. Однако я не могу заставить его работать. Любая помощь вам будет очень полезна. Спасибо.

Mohibur Rashid

Есть ли эти пробелы в вашем имени таблицы и имени Поля?

2 Ответов

Рейтинг:
1

Patrice T

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь уязвимости под названием "SQL injection", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа рухнет. Если пользователь вводит имя типа "Брайан О'Коннер", это может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция-Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL Injection-руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL-OWASP[^]


Рейтинг:
0

Jochen Arndt

Читать документацию:

значение

Возвращает FALSE при сбое. Для успешного выбора, показа, описания или объяснения запросов mysqli_query () вернет объект mysqli_result. Для других успешных запросов mysqli_query () вернет TRUE.
Вы выполняете INSERT оператор, для которого возвращаемое значение всегда является логическим. Так что нет даже никакой необходимости звонить mysqli_free_result() но это неправильно, потому что вы (должны) знать, что $result не может быть mysqli_result.

Исходный источник, на котором основан ваш код, вероятно, выполнял SQL-команду, которая вернет a mysqli_result Но даже тогда ваш код будет неправильным, потому что он должен быть освобожден только после успеха.

Как видите, лучше написать свой собственный код с нуля, чем модифицировать существующий (особенно если вы новичок). Если код, который вы использовали в качестве базы, также вызывает mysqli_free_result() вне условного блока, как и в вашем опубликованном коде, все еще хуже: вы скопировали код, делая это неправильно.

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


Member 13387451

Хорошо, спасибо, я попробую