PHPize Online / SQLize Online  /  SQLtest Online

A A A
Share      Blog   Popular
Copy Format Clear
CREATE TABLE questions ( question_id INT PRIMARY KEY, catalog_id INT, user_id INT ); CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(255), gender CHAR(1) ); INSERT INTO users (id, name, gender) VALUES (1, 'John Doe', 'M'), (2, 'Jane Smith', 'F'), (3, 'Alice Johnson', 'F'); INSERT INTO questions (question_id, catalog_id, user_id) VALUES (1, 101, 1); -- Вопрос для Jane Smith INSERT INTO questions (question_id, catalog_id, user_id) VALUES (2, 102, 2); -- Вопрос для Alice Johnson INSERT INTO questions (question_id, catalog_id, user_id) VALUES (3, 103, 3); select * from users
Copy Clear
Copy Format Clear
<?php /** * Подготовка запросов в БД * * @param mysqli $mysqli * @param string $query * @param array $params * @return mysqli_stmt|null */ function prepareAndExecute(mysqli $mysqli, string $query, array $params): ?mysqli_stmt { $stmt = $mysqli->prepare($query); if (!$stmt) { error_log("Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error); return null; } $types = str_repeat('i', count($params)); $stmt->bind_param($types, ...$params); if (!$stmt->execute()) { error_log("Execute failed: (" . $stmt->errno . ") " . $stmt->error); return null; } return $stmt; } /** * Получение результата запроса к БД * * @param mysqli_stmt $stmt * @return array */ function fetchAllAssoc(mysqli_stmt $stmt): array { $result = $stmt->get_result(); if (!$result) { error_log("Execute failed: (" . $stmt->errno . ") " . $stmt->error); return []; } $data = []; while ($row = $result->fetch_assoc()) { $data[] = $row; } return $data; } if ($mysqli->connect_error) { error_log("Connection failed: " . $mysqli->connect_error); exit; } $questionsQuery = 'SELECT * FROM questions WHERE catalog_id=?'; $userQuery = 'SELECT name, gender FROM users WHERE id=?'; $stmt = prepareAndExecute($mysqli, $questionsQuery, [$catId]); if (!$stmt) { exit; } $questionsResult = fetchAllAssoc($stmt); $result = []; foreach ($questionsResult as $question) { $userId = $question['user_id']; $userStmt = prepareAndExecute($mysqli, $userQuery, [$userId]); if (!$userStmt) { continue; } $userResult = fetchAllAssoc($userStmt); if (empty($userResult)) { continue; } $result[] = ['question' => $question, 'user' => reset($userResult)]; } $stmt->close(); $mysqli->close(); var_dump($result);
Show:  
Copy Clear