mysql-query-placeholders
Build prepared statements from named parameters.
Consider the following object:
const user = id: 123 status: active: true services: home: route: '/' dashboard: route: '/dashboard' name: 'John' email: 'email@mail.com';
Then you can easily create a prepared statement for MySQL using the data from the object above.
const mqp = ;const mysql = createConnection... const query = 'SELECT * FROM users WHERE id = :id AND name = :name;';const queryData = mqp;console;// {// sql: 'SELECT * FROM users WHERE id = ? AND name = ?;',// values: [123, 'John'],// } // use named parametersmysql;
ES6 Module
;; ; ;;console.logqueryData;// {// sql: 'SELECT * FROM users WHERE id = ? AND name = ?;',// values: [123, 'John'],// } // use named parametersawait mysql.queryqueryData;
Handling missing parameters
MySQL throws an error if a parameter is not given.
Passing a configuration object with useNullForMissing
set to true (which is true
by default), a null
value is used instead.
const query = 'SELECT * FROM users WHERE id = :id AND last_name = :last_name;';const queryData = mqp;console;// {// sql: 'SELECT * FROM users WHERE id = ? AND last_name = ?;',// values: [123, null],// }
If you do not want to use null
by default, you can throw an error instead, setting the useNullForMissing
configuration option to false
.
try const query = 'SELECT * FROM users WHERE id = :id AND last_name = :last_name;'; const queryData = mqp; catch e errorMessage = emessage; console; // Missing value for statement. // last_name not provided for statement: // ...
Support for multiple level object property values
mqp is capable to get a object property value from a key.name.property.value syntax. This is useful when you do not want to reassign the property value to another variable or you want to use the original object instead of creating a new one.
const query = 'SELECT * FROM services WHERE route IN (:services.dashboard.route, :services.home.route);';const queryData = mqp;console;// {// sql: 'SELECT * FROM services WHERE route IN (?, ?);',// values: [ '/dashboard', '/' ]// }
Missing property:
const query = 'INSERT INTO services (name, route) VALUES (\'cpanel\', :services.cpanel.route);';const queryData = mqp;console;// {// sql: "INSERT INTO services (name, route) VALUES ('cpanel', ?);",// values: [ null ]// }
Or using {useNullForMissing: false}
config:
try const query = 'SELECT * FROM services WHERE route = :services.cpanel.route;'; const queryData = mqp; catch e errorMessage = emessage; console; // Missing value for statement. // services.cpanel.route not provided for statement: // ...