An open mysql.connection.Connection to the database.
The prepared statement to be run.
Nullable!Variant: This will be null (check via Nullable.isNull) if the query resulted in an empty result set.
$(TYPE_MAPPINGS)
auto myInt = 7; Nullable!Variant value = myConnection.queryRow("SELECT * FROM `myTable` WHERE `a` = ?", myInt);
Execute an SQL SELECT command or prepared statement and return a single value: the first column of the first row received.
If the query did not produce any rows, or the rows it produced have zero columns, this will return Nullable!Variant(), ie, null. Test for this with result.isNull.
If the query DID produce a result, but the value actually received is NULL, then result.isNull will be FALSE, and result.get will produce a Variant which CONTAINS null. Check for this with result.get.type == typeid(typeof(null)).
If the SQL command does not produce a result set (such as INSERT/CREATE/etc), then mysql.exceptions.MYXNoResultRecieved will be thrown. Use exec instead for such commands.
If args is supplied, the sql string will automatically be used as a prepared statement. Prepared statements are automatically cached by mysql-native, so there's no performance penalty for using this multiple times for the same statement instead of manually preparing a statement.
If args and prepared are both provided, args will be used, and any arguments that are already set in the prepared statement will automatically be replaced with args (note, just like calling mysql.prepared.Prepared.setArgs, this will also remove all mysql.prepared.ParameterSpecialization that may have been applied).
Only use the const(char[]) sql overload that doesn't take args when you are not going to be using the same command repeatedly and you are CERTAIN all the data you're sending is properly escaped. Otherwise, consider using overload that takes a Prepared.
If you need to use any mysql.prepared.ParameterSpecialization, use mysql.connection.prepare to manually create a mysql.prepared.Prepared, and set your parameter specializations using mysql.prepared.Prepared.setArg or mysql.prepared.Prepared.setArgs.