Я столкнулся с проблемой. Я получаю эту ошибку
Неустранимая ошибка: Uncaught TypeError: возвращаемое значение safeQuery () должно быть типа array или null, bool возвращено в E: \ Hosted \ action \ conn \ db c. php: 69 Трассировка стека: # 0 E: \ Hosted \ action \ conn \ db c. php (6): safeQuery ('INSERT INTO cu ...', Array) # 1 { main} добавлено в E: \ Hosted \ action \ conn \ db c. php в строке 69
Я не уверен, где моя ошибка. Код работал. Но внезапно это прекращается. Возможно, я ошибся. Мои вопросы верны. Я перепроверил это. Вот мой код:
<?php
// Test:
$sql = "INSERT INTO `customers`(`name`, `email`, `phn_num`) VALUES (?, ?, ?)";
$params = array("Assad Rajab", "email@gmail.com", "0123456789");
$cus_id = safeQuery($sql, $params);
function safeQuery(string $sql, array $params = [], $db = NULL ): ?array {
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$conn = mysqli_connect("localhost", "phpmyadminuser", "Technik-Phone-Admin");
if (!$conn) {
die("no connection to database");
} else {
if (!mysqli_set_charset($conn, "utf8")) {
die("Error loading character set utf8: </br>". mysqli_error($conn));
} else {
if (isset($db)) {
// Use the given DB
mysqli_select_db($conn, $db);
} else {
// Use the default DB
mysqli_select_db($conn, "technik-phone_mng");
}
}
}
// Prepare statement:
$stmt = mysqli_prepare($conn, $sql);
// If the statement has parameters then bind them all now
if ($params) {
mysqli_stmt_bind_param($stmt, str_repeat("s", count($params)), ...$params);
}
// Execute it and get results if there are any
mysqli_stmt_execute($stmt);
if ($result = mysqli_stmt_get_result($stmt)) {
$row = mysqli_fetch_array($result, MYSQLI_BOTH);
// echo $result->num_rows;
// print_r($data);
// echo $data[0]['name'];
return $row;
}
// If the query was INSERT or UPDATE then return TRUE
echo "Done";
return TRUE;
}
?>
Я хочу иметь возможность возвращать идентификатор нового вставленного столбца. Insert_id не работал. В любом случае, чтобы вернуть это без использования другого запроса?
Обновление
то, что я пытаюсь сделать, безопасно для меня, написание
$sql = "sql stmt";
$result = mysqli_query($conn, $sql);
if(!$result){
// do something
} else{
// do something else
}
пытаюсь поместить указанный выше блок в безопасную функцию и избегать использования mysqli_real_escape()
Конечная цель моя конечная цель - получить возвращенный массив, если мой sql stmt был выбран. если stmt был вставлен, я хочу получить идентификатор новой вставленной строки. эта информация должна быть возвращена.
Обновление
ошибка в том, что возвращаемый результат должен быть ПУСТО (NULL). не правда. последняя проблема заключается в том, что я пытаюсь получить идентификатор новой отправленной строки. но я не знаю, как это сделать без exe c другого запроса для этого. есть идеи?