Executing queries with query method in PHP - Time & Space Complexity
When running database queries using the query method, it's important to understand how the time it takes grows as the data or query size grows.
We want to know how the number of operations changes when the input gets bigger.
Analyze the time complexity of the following code snippet.
// Connect to database
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'user', 'pass');
// Execute a query
$result = $pdo->query('SELECT * FROM users');
// Fetch all rows
$rows = $result->fetchAll(PDO::FETCH_ASSOC);
// Process rows
foreach ($rows as $row) {
echo $row['name'] . "\n";
}
This code runs a SQL query to get all users, fetches all results, and then prints each user's name.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Looping through all rows returned by the query.
- How many times: Once for each row in the users table.
As the number of users grows, the time to fetch and print each user grows too.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 fetch and print steps |
| 100 | About 100 fetch and print steps |
| 1000 | About 1000 fetch and print steps |
Pattern observation: The work grows directly with the number of rows; doubling rows doubles work.
Time Complexity: O(n)
This means the time to run and process the query grows in a straight line with the number of rows returned.
[X] Wrong: "The query method runs instantly no matter how many rows are returned."
[OK] Correct: Fetching and processing each row takes time, so more rows mean more work and longer time.
Understanding how query execution time grows helps you write efficient database code and explain your reasoning clearly in interviews.
"What if we used a query with a WHERE clause that limits results to a fixed number? How would the time complexity change?"
Practice
query method in PHP do when used with a database connection?Solution
Step 1: Understand the purpose of the query method
Thequerymethod is designed to send SQL commands to the database for execution.Step 2: Identify what the method does with the SQL statement
It runs the SQL command and returns the result, such as data or success status.Final Answer:
It executes an SQL statement on the database. -> Option AQuick Check:
query method = executes SQL [OK]
- Thinking query creates or closes connections
- Confusing query with preparing statements
- Assuming query formats SQL strings
query method on a PDO object named $pdo?Solution
Step 1: Recall the method call syntax for PDO query
Thequerymethod is called on the PDO object using arrow notation with the SQL string as argument.Step 2: Check each option for correct syntax
$pdo->query('SELECT * FROM users'); correctly calls$pdo->query('SELECT * FROM users');. Others misuse assignment, function call, or wrong method.Final Answer:
$pdo->query('SELECT * FROM users'); -> Option DQuick Check:
Correct method call = $pdo->query('SELECT * FROM users'); [OK]
- Using assignment instead of method call
- Calling query as a standalone function
- Using execute instead of query for simple queries
$pdo = new PDO('sqlite::memory:');
$pdo->exec('CREATE TABLE test (id INTEGER)');
$pdo->exec('INSERT INTO test (id) VALUES (1), (2), (3)');
$result = $pdo->query('SELECT COUNT(*) FROM test');
$count = $result->fetchColumn();
echo $count;Solution
Step 1: Understand the SQL commands executed
The code creates a table and inserts three rows with ids 1, 2, and 3.Step 2: Analyze the SELECT COUNT(*) query and fetch result
The query counts rows in the table, which is 3. fetchColumn() returns this count as a string.Final Answer:
3 -> Option AQuick Check:
Row count = 3 [OK]
- Confusing fetchColumn() with fetch() returning array
- Expecting column name instead of count value
- Assuming query returns error without table
query method:$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'user', 'pass');
$sql = "INSERT INTO users (name) VALUES ('Alice')";
$result = $pdo->query($sql);
if ($result) {
echo "Insert successful";
} else {
echo "Insert failed";
}Solution
Step 1: Check usage of query() with INSERT statements
Thequerymethod can execute INSERT but returns a PDOStatement or false, not a simple true/false.Step 2: Understand how to check success of INSERT
For INSERT, it's better to use exec() which returns affected rows count or false on failure.Final Answer:
Using query() for INSERT may not return true/false as expected. -> Option CQuick Check:
query() returns PDOStatement, not boolean for INSERT [OK]
- Expecting query() to return boolean for INSERT
- Confusing query() and exec() methods
- Ignoring return value type of query()
users table and store them in an array using the query method. Which code snippet correctly does this?Solution
Step 1: Understand how to fetch all values from a single column
ThefetchAll(PDO::FETCH_COLUMN)fetches all rows from the first column into an array.Step 2: Check each option for correct usage
$stmt = $pdo->query('SELECT username FROM users'); $usernames = $stmt->fetchAll(PDO::FETCH_COLUMN); correctly calls query(), then fetchAll with FETCH_COLUMN to get usernames array. Others misuse fetchAll or fetchColumn.Final Answer:
$stmt = $pdo->query('SELECT username FROM users'); $usernames = $stmt->fetchAll(PDO::FETCH_COLUMN); -> Option BQuick Check:
fetchAll(PDO::FETCH_COLUMN) returns array of column values [OK]
- Using fetchColumn() to get all rows instead of one
- Not storing query result before fetching
- Passing wrong fetch mode to fetch()
Ready to prove it?
Pass the test and this pattern moves unknown
