mysql-native v3.0.0

API Reference Home: [This Version] [Latest Version] [Other Versions]


Function queryRow

Execute an SQL SELECT command or prepared statement where you only want the first Row, if any.

std.typecons.Nullable!(mysql.result.Row) queryRow (
  Connection conn,
  const(char[]) sql,
  ColumnSpecialization[] csa = null
);

Nullable!Row queryRow(T...) (
  Connection conn,
  const(char[]) sql,
  T args
)
if (T.length > 0 && !is(T[0] == Variant[]) && !is(T[0] == ColumnSpecialization) && !is(T[0] == ColumnSpecialization[]));

std.typecons.Nullable!(mysql.result.Row) queryRow (
  Connection conn,
  const(char[]) sql,
  std.variant.VariantN!(32L)[] args
);

std.typecons.Nullable!(mysql.result.Row) queryRow (
  Connection conn,
  ref Prepared prepared
);

Nullable!Row queryRow(T...) (
  Connection conn,
  ref Prepared prepared,
  T args
)
if (T.length > 0 && !is(T[0] == Variant[]) && !is(T[0] == ColumnSpecialization) && !is(T[0] == ColumnSpecialization[]));

std.typecons.Nullable!(mysql.result.Row) queryRow (
  Connection conn,
  ref Prepared prepared,
  std.variant.VariantN!(32L)[] args
);

std.typecons.Nullable!(mysql.result.Row) queryRow (
  Connection conn,
  ref BackwardCompatPrepared prepared
);

If the SQL command does not produce a result set (such as INSERT/CREATE/etc), then 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 Prepared.setArgs, this will also remove all 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 ParameterSpecialization, use prepare to manually create a Prepared, and set your parameter specializations using Prepared.setArg or Prepared.setArgs.

Type Mappings

See the MySQL/D Type Mappings tables

Parameters

NameDescription
conn An open Connection to the database.
sql The SQL command to be run.
prepared The prepared statement to be run.
csa Not yet implemented.

Returns

Nullable!(Row): This will be null (check via Nullable.isNull) if the query resulted in an empty result set.

Example

auto myInt = 7;
Nullable!Row row = myConnection.queryRow("SELECT * FROM `myTable` WHERE `a` = ?", myInt);