Bird
Raised Fist0
Node.jsframework~10 mins

Query parameterization for safety in Node.js - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to safely insert a user ID into the SQL query using parameterization.

Node.js
const userId = 5;
const query = "SELECT * FROM users WHERE id = [1]";
Drag options to blanks, or click blank then click option'
A?
B$1
C:id
D@userId
Attempts:
3 left
💡 Hint
Common Mistakes
Using string concatenation instead of placeholders.
Using raw variables directly in the query string.
2fill in blank
medium

Complete the code to pass the user ID as a parameter to the query execution function.

Node.js
db.query("SELECT * FROM users WHERE id = ?", [1], (err, results) => {
  if (err) throw err;
  console.log(results);
});
Drag options to blanks, or click blank then click option'
AuserId
B{userId}
C"userId"
D[userId]
Attempts:
3 left
💡 Hint
Common Mistakes
Passing the parameter as a single value instead of an array.
Passing the parameter as a string instead of a variable.
3fill in blank
hard

Fix the error in the code by completing the parameterized query syntax for PostgreSQL using node-postgres.

Node.js
const userId = 10;
const query = "SELECT * FROM users WHERE id = [1]";
client.query(query, [userId], (err, res) => {
  if (err) throw err;
  console.log(res.rows);
});
Drag options to blanks, or click blank then click option'
A?
B$1
C:userId
D@id
Attempts:
3 left
💡 Hint
Common Mistakes
Using ? placeholder which is not supported by node-postgres.
Using named placeholders which are not supported in this context.
4fill in blank
hard

Fill both blanks to safely update a user's email using parameterized query with mysql2 library.

Node.js
const userId = 7;
const newEmail = "user@example.com";
const query = "UPDATE users SET email = [1] WHERE id = [2]";
db.execute(query, [newEmail, userId], (err, results) => {
  if (err) throw err;
  console.log(results);
});
Drag options to blanks, or click blank then click option'
A?
B$1
C:email
D@id
Attempts:
3 left
💡 Hint
Common Mistakes
Mixing different placeholder styles in the same query.
Using named placeholders which mysql2 does not support.
5fill in blank
hard

Fill all three blanks to safely select users by status and age using parameterized query with node-postgres.

Node.js
const status = 'active';
const minAge = 18;
const maxAge = 30;
const query = `SELECT * FROM users WHERE status = [1] AND age >= [2] AND age <= [3]`;
client.query(query, [status, minAge, maxAge], (err, res) => {
  if (err) throw err;
  console.log(res.rows);
});
Drag options to blanks, or click blank then click option'
A?
B$1
C$3
D$2
Attempts:
3 left
💡 Hint
Common Mistakes
Using ? placeholders with node-postgres.
Numbering placeholders out of order.

Practice

(1/5)
1. Why is query parameterization important in Node.js database queries?
easy
A. It prevents SQL injection by separating user input from the query structure.
B. It makes queries run faster by caching results automatically.
C. It allows queries to be written without any syntax rules.
D. It automatically encrypts the database connection.

Solution

  1. Step 1: Understand SQL injection risk

    When user input is directly included in query strings, attackers can inject harmful SQL code.
  2. Step 2: Role of parameterization

    Parameterization sends user input separately, so the database treats it only as data, not code.
  3. Final Answer:

    It prevents SQL injection by separating user input from the query structure. -> Option A
  4. Quick Check:

    Query parameterization = prevents SQL injection [OK]
Hint: Parameterization separates data from code to block injections [OK]
Common Mistakes:
  • Thinking parameterization speeds up queries automatically
  • Believing it removes all syntax rules
  • Confusing parameterization with encryption
2. Which of the following is the correct way to use parameterized queries with the 'mysql2' library in Node.js?
easy
A. connection.query('SELECT * FROM users WHERE id = ' + userId);
B. connection.query('SELECT * FROM users WHERE id = $userId');
C. connection.query('SELECT * FROM users WHERE id = ${userId}');
D. connection.query('SELECT * FROM users WHERE id = ?', [userId]);

Solution

  1. Step 1: Identify parameter placeholder syntax

    The 'mysql2' library uses '?' as placeholders for parameters.
  2. Step 2: Check correct parameter passing

    Parameters must be passed as an array as the second argument to 'query'.
  3. Final Answer:

    connection.query('SELECT * FROM users WHERE id = ?', [userId]); -> Option D
  4. Quick Check:

    mysql2 uses '?' + array for parameters [OK]
Hint: Use '?' and array for parameters in mysql2 queries [OK]
Common Mistakes:
  • Concatenating variables directly into query strings
  • Using template literals inside query strings
  • Using incorrect placeholder syntax like $userId
3. What will be the output of this Node.js code snippet using 'pg' (PostgreSQL) library?
const { Client } = require('pg');
const client = new Client();
await client.connect();
const userId = "1; DROP TABLE users;";
const res = await client.query('SELECT * FROM users WHERE id = $1', [userId]);
console.log(res.rows.length);
medium
A. It will return the number of rows with id exactly matching "1; DROP TABLE users;".
B. It will throw a syntax error due to SQL injection.
C. It will delete the users table and return zero.
D. It will return all rows from the users table.

Solution

  1. Step 1: Understand parameterization effect

    The query uses parameterized input with '$1', so the input is treated as data, not code.
  2. Step 2: Analyze input impact

    The string "1; DROP TABLE users;" is searched as a literal id, which likely matches no rows.
  3. Final Answer:

    It will return the number of rows with id exactly matching "1; DROP TABLE users;". -> Option A
  4. Quick Check:

    Parameterized queries treat input as data, not commands [OK]
Hint: Parameterized queries treat input literally, preventing injection [OK]
Common Mistakes:
  • Assuming injection will run despite parameterization
  • Expecting syntax errors from malicious input
  • Thinking all rows will be returned without a WHERE clause
4. Identify the error in this Node.js code using 'sqlite3' for parameterized queries:
db.run('INSERT INTO users (name, age) VALUES (?, ?)', name, age, (err) => {
  if (err) throw err;
  console.log('User added');
});
medium
A. The 'db.run' method cannot accept parameters.
B. Parameters should be passed as an array, not separate arguments.
C. The query string should use named parameters like ':name' instead of '?'.
D. The callback function is missing an error parameter.

Solution

  1. Step 1: Check parameter passing syntax

    sqlite3 expects parameters as an array or object, not separate arguments.
  2. Step 2: Correct usage

    Parameters should be passed as an array: [name, age].
  3. Final Answer:

    Parameters should be passed as an array, not separate arguments. -> Option B
  4. Quick Check:

    sqlite3 parameters = array [OK]
Hint: Pass parameters as array in sqlite3 queries [OK]
Common Mistakes:
  • Passing parameters as separate arguments
  • Confusing named and positional parameters
  • Ignoring callback error handling
5. You want to safely insert multiple user records in a batch using Node.js and 'pg' library. Which approach correctly uses query parameterization to avoid SQL injection?
hard
A. Run separate queries for each user without parameterization.
B. Build a single query string by concatenating all user values directly.
C. Use a parameterized query with multiple placeholders and pass all values in an array.
D. Use template literals to insert user data inside the query string.

Solution

  1. Step 1: Understand batch insertion with parameterization

    To insert multiple records safely, use placeholders for each value and pass all values as an array.
  2. Step 2: Avoid unsafe concatenation or unparameterized queries

    Concatenating strings or using template literals risks injection; separate queries without parameters are inefficient and unsafe.
  3. Final Answer:

    Use a parameterized query with multiple placeholders and pass all values in an array. -> Option C
  4. Quick Check:

    Batch insert = parameterized placeholders + values array [OK]
Hint: Use placeholders and pass all values as array for batch inserts [OK]
Common Mistakes:
  • Concatenating user data into query strings
  • Running unparameterized queries repeatedly
  • Using template literals for SQL queries
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard