Tokishu
@Tokishu
Что?

Как исправить ошибку php Call to a member function bind_param() on boolean in?

При выполнении этой функции вылазит ошибка



Fatal error: Uncaught Error: Call to a member function bind_param() on boolean in C:\OSPanel\domains\localhost\demos\cases\src\php\api.php: 168
Stack trace:
#0 C:\OSPanel\domains\localhost\demos\cases\src\php\api.php(48): lawsuit('Tok1shu, God0t', 'Quinowell, Just...',
1, '\xD0\x9E\xD0\xBD\xD0\xB8 \xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8F...', '\xD0\x97\xD0\xB0\xD0\xB1\xD1\x80\xD0\xB0\xD1\x82\xD1\x8C ...', 'https: //www.you...', NULL, NULL)
#1 {main
}
thrown in C:\OSPanel\domains\localhost\demos\cases\src\php\api.php on line 168


Так и не смог разобраться в чем проблема, может я тупой
Сама функция:
function lawsuit($plaintiff, $respondent, $type, $reason, $petition, $video){
    global $conn;
    $results = array();
    $plaintiffs = array_map('trim', explode(',', $plaintiff));
    $respondents = array_map('trim', explode(',', $respondent));
    $stmt = $conn->prepare("INSERT INTO `cases`(`nickname`, `respondent`, `type`, `reason`, `petition`, `video`) VALUES (?, ?, ?, ?, ?, ?)");
    $plaintiffs_json = json_encode($plaintiffs);
    $respondents_json = json_encode($respondents);
    $stmt->bind_param("ssisss", $plaintiffs_json, $respondents_json, $type, $reason, $petition, $video);
    if ($stmt->execute()) {
        // Запрос был выполнен успешно
        $results[] = array(
            'error' => false,
            'message' => 'Дело успешно добавлено'
        );
    } else {
        // Произошла ошибка при выполнении запроса
        $results[] = array(
            'error' => true,
            'message' => 'Ошибка при добавлении дела: ' . $conn->error
        );
    }
    return $results;
}


Строка 168:
$results[] = array(
  • Вопрос задан
  • 519 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Call to a member function bind_param() on boolean
Где вызывается bind_param()?
$stmt->bind_param("ssisss", $plaintiffs_json, $respondents_json, $type, $reason, $petition, $video);
Где stmt получает значение?
$stmt = $conn->prepare("INSERT INTO `cases`(`nickname`, `respondent`, `type`, `reason`, `petition`, `video`) VALUES (?, ?, ?, ?, ?, ?)");
В каком случае prepare может вернуть значение типа boolean?
mysqli_prepare() returns a statement object or false if an error occurred.
Вывод - при вызове prepare возникает ошибка.
Как найти ошибку? Либо проверить $conn->error после вызова prepare, либо, что правильнее, сразу настроить mysqli на выброс исключений при ошибке, добавив перед соединением с базой вызов
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Так и не смог разобраться в чем проблема, может я тупой

Да нет, дело не в умственных способностях. Просто всё поколение такое. Не умеет пользоваться интернетом. Только тикток смотреть в телефоне.

Вот, я погуглил за вас: Не добавляются данные в таблицу

Соответственно, после исправления ошибки надо будет ещё переписать кусок после bind_param, убрав бессмысленную проверку и оставив только
$stmt->execute();
return [
    'error' => false,
    'message' => 'Дело успешно добавлено'
];
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы