What is a raw query in the context of Express and databases?
A raw query is a direct database command written in SQL or the database's native language, sent without using an ORM or query builder. It lets you run custom commands when needed.
Click to reveal answer
beginner
Why might you use raw queries instead of ORM methods in Express?
You use raw queries when you need more control, complex queries, or better performance that ORM methods can't easily provide.
Click to reveal answer
intermediate
How do you safely include user input in raw queries to avoid security risks?
You use parameterized queries or placeholders to safely insert user input, preventing SQL injection attacks.
Click to reveal answer
intermediate
Show a simple example of a raw query using Express with a PostgreSQL client.
Example: client.query('SELECT * FROM users WHERE id = $1', [userId]) runs a raw SQL query with a parameter to safely get a user by id.
Click to reveal answer
beginner
What is a risk of using raw queries without care in Express apps?
Using raw queries without parameterization can lead to SQL injection, where attackers can run harmful commands on your database.
Click to reveal answer
What is the main reason to use raw queries in Express apps?
ATo avoid writing any SQL code
BTo run complex or custom database commands not supported by ORM
CTo automatically sanitize all user inputs
DTo speed up server startup time
✗ Incorrect
Raw queries let you run complex or custom commands that ORM methods may not support.
Which method helps prevent SQL injection when using raw queries?
AUsing parameterized queries or placeholders
BWriting queries as plain strings with user input directly
CDisabling database logging
DUsing only GET requests
✗ Incorrect
Parameterized queries safely insert user input, preventing SQL injection.
In Express, which package is commonly used to run raw SQL queries with PostgreSQL?
Abody-parser
Bexpress-session
Cpg
Dcors
✗ Incorrect
The 'pg' package is the PostgreSQL client for Node.js and Express.
What is a downside of using raw queries too often in your Express app?
AThey can make code harder to maintain and less portable
BThey always run slower than ORM methods
CThey automatically encrypt data
DThey prevent database connections
✗ Incorrect
Raw queries can be harder to read and maintain compared to ORM methods.
Which of these is NOT a good practice when using raw queries?
AHandling errors properly
BUsing placeholders for user input
CTesting queries carefully
DDirectly inserting user input into query strings
✗ Incorrect
Directly inserting user input risks SQL injection and is unsafe.
Explain what raw queries are and when you might need to use them in an Express app.
Think about when ORM tools might not be enough.
You got /3 concepts.
Describe how to safely include user input in raw queries to avoid security problems.
Focus on how to keep your database safe.
You got /3 concepts.
Practice
(1/5)
1. What is the main reason to use raw queries in Express applications?
easy
A. To write direct SQL commands when query builders are insufficient
B. To automatically generate SQL queries without any code
C. To avoid using any SQL and rely only on JavaScript
D. To speed up the server by skipping database calls
Solution
Step 1: Understand raw queries purpose
Raw queries allow writing direct SQL commands for complex or special cases.
Step 2: Compare with other options
Options A, B, and C are incorrect because raw queries do not skip database calls, auto-generate SQL, or avoid SQL.
Final Answer:
To write direct SQL commands when query builders are insufficient -> Option A
Quick Check:
Raw queries = direct SQL use [OK]
Hint: Raw queries = direct SQL for special cases [OK]
Common Mistakes:
Thinking raw queries auto-generate SQL
Believing raw queries avoid SQL entirely
Assuming raw queries skip database calls
2. Which of the following is the correct way to use a raw query with parameters in Express using a SQL library?
easy
A. db.query('SELECT * FROM users WHERE id = ' + userId)
B. db.query('SELECT * FROM users WHERE id = ?', [userId])
C. db.query('SELECT * FROM users WHERE id = $userId')
D. db.query('SELECT * FROM users WHERE id = :userId')
Solution
Step 1: Identify parameterized query syntax
Using '?' with an array of parameters is the standard safe way to pass values.
Step 2: Check other options
db.query('SELECT * FROM users WHERE id = ' + userId) concatenates strings (unsafe). Options C and D use placeholders not standard in many Express SQL libraries.
Final Answer:
db.query('SELECT * FROM users WHERE id = ?', [userId]) -> Option B
Quick Check:
Use '?' + params array for safe raw queries [OK]
Hint: Use '?' with array for parameters in raw queries [OK]
Common Mistakes:
Concatenating variables directly into query strings
Using unsupported placeholder syntax
Not passing parameters as an array
3. Given the code snippet:
const result = await db.query('SELECT * FROM products WHERE price > ?', [100]);
console.log(result.rows.length);
What will be logged if there are 5 products priced over 100?
medium
A. 5
B. undefined
C. 0
D. An error will occur
Solution
Step 1: Understand the query and parameters
The raw query selects products with price greater than 100, passing 100 safely as a parameter.
Step 2: Interpret the result object
Assuming the database library returns an object with a 'rows' array, its length will be the number of matching products, which is 5.
Final Answer:
5 -> Option A
Quick Check:
Rows length = number of matching products [OK]
Hint: Result rows length = count of matched records [OK]
Common Mistakes:
Expecting result directly as array without .rows
Confusing parameter placement
Assuming query returns undefined or error
4. Identify the error in this raw query usage:
const userId = 10;
const result = await db.query('SELECT * FROM users WHERE id = ' + userId);
medium
A. The parameter should be passed as an object, not concatenated
B. The query syntax is invalid because of missing quotes
C. It risks SQL injection by concatenating variables directly
D. The query will always return zero results
Solution
Step 1: Analyze query construction
The query concatenates userId directly into the string, which is unsafe and can cause SQL injection.
Step 2: Understand best practice
Parameters should be passed separately using placeholders to avoid injection risks.
Final Answer:
It risks SQL injection by concatenating variables directly -> Option C
Quick Check:
Never concatenate variables directly in raw queries [OK]
Hint: Avoid string concatenation; use placeholders [OK]
Common Mistakes:
Ignoring SQL injection risks
Thinking concatenation is safe for numbers
Not using parameterized queries
5. You need to update multiple user records with different emails using raw queries in Express. Which approach is best to safely perform this?
hard
A. Use raw queries without parameters for faster execution
B. Concatenate all updates into one big query string and run once
C. Update users one by one by concatenating values directly
D. Use a loop with parameterized raw queries for each user update
Solution
Step 1: Consider safety and flexibility
Using a loop with parameterized queries ensures each update is safe and avoids SQL injection.
Step 2: Evaluate other options
Concatenating all updates risks injection and syntax errors; skipping parameters is unsafe; direct concatenation is insecure.
Final Answer:
Use a loop with parameterized raw queries for each user update -> Option D
Quick Check:
Loop + parameters = safe batch updates [OK]
Hint: Loop with parameters for multiple safe updates [OK]
Common Mistakes:
Trying to build one big concatenated query
Ignoring parameterization for speed
Concatenating user data directly
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.