Я пытаюсь обновить строки базы данных с помощью вызовов API, но по какой-то причине возникает эта ошибка:
Uncaught Ошибка: вызов функции-члена fetch () для строки
Я не уверен, что это означает под функцией в строке, поскольку я применяю ее к объекту mysqli_stmt.
Вот так выглядит файл put:
if (isset($authlvl)) {
if (ctype_space($authlvl) == false && $authlvl >= 3) {
if (isset($id) && ctype_space($id) == false) {
if (isset($id) && ctype_space($id) == false && $id !== null) {
$rule = $id;
$request = 'id';
} else if (isset($username) && ctype_space($username) == false && $username !== null) {
$rule = $username;
$request = 'username';
} else if (isset($email) && ctype_space($email) == false && $email !== null) {
$rule = $email;
$request = 'email';
} else if (isset($password) && ctype_space($password) == false && $password !== null) {
$rule = $password;
$request = 'password';
} else if (isset($image) && ctype_space($image) == false && $image !== null) {
$rule = $image;
$request = 'image';
} else {
$request = "1";
$rule = "2";
}
$post = new Post($db);
$result = $post->post($request, $rule);
$result->bind_result($previd, $prevusername, $prevemail, $prevpassword, $previmage, $prevauthlvl);
$result->store_result();
$num = $result->num_rows();
if ($num > 0) {
while ($result->fetch()) {
$put = new Put($db);
$result = $put->update(
isset($username) ? preg_replace('/\s+/', '', $username) : null,
isset($email) ? preg_replace('/\s+/', '', $email) : null,
isset($password) ? preg_replace('/\s+/', '', $password) : null,
isset($image) ? preg_replace('/\s+/', '', $image) : null,
isset($authlvl) ? preg_replace('/\s+/', '', $authlvl) : null,
$previd,
$prevusername,
$prevemail,
$prevpassword,
$previmage,
$prevauthlvl
);
echo $result;
}
} else {
echo "Couldn't update row. Reason: 404 Not Found";
}
} else {
echo "A valid id is required!";
}
} else {
echo "You are not authorized to peform this request!";
}
} else {
echo "You are not authorized to peform this request!";
}
$ username, $ email ect ... вычисляются с помощью огромного беспорядка операторов if, который я не буду сейчас включать, потому что он использует много строк, но вот небольшая его часть:
$content = file_get_contents('php://input');
if (strpos($content, "email") !== false) {
$email = substr($content, (strpos($content, "email")) + 10, ((strpos($content, "-", strpos($content, "email"))) - strpos($content, "email")) - 12);
}
вот почтовый файл, который отправляет запрос:
class Post
{
private $conn;
public $id;
public $username;
public $email;
public $password;
public $image;
public $authlvl;
public function __construct($db)
{
$this->conn = $db;
}
public function post($request, $rule)
{
$format = "s";
if ($request == "id") {
$query = "SELECT * FROM users WHERE id=?";
$format = "i";
} else if ($request == "username") {
$query = "SELECT * FROM users WHERE username=?";
} else if ($request == "email") {
$query = "SELECT * FROM users WHERE email=?";
} else if ($request == "password") {
$query = "SELECT * FROM users WHERE password=?";
} else if ($request == "image") {
$query = "SELECT * FROM users WHERE image=?";
} else {
$query = "SELECT * FROM users";
}
if ($stmt = $this->conn->prepare($query)) {
$stmt->bind_param("" . $format . "", $rule);
$stmt->execute();
return $stmt;
} else {
echo "invalid string";
}
}
}
Я тестирую API с почтальоном.
Что я уже пробовал:
- Сохранение результата в файле записи.
- Переопределение $ stmt в $ stmt-> execute (), которое дает мнеложная логическая ошибка.
- Преобразование детали в PDO (позже выяснилось, что вы не можете смешивать OOP с PDO)
- Жестко закодированные переменные всторона положить файл, который также не удается
Если у кого-нибудь есть решение, дайте мне знать:)