mysqli::prepare

mysqli_prepare

Prepare an SQL statement for execution

&reftitle.description;

&style.oop;

`mysqli_stmt` `mysqli::prepare` `string` `query`

&style.procedural;

`mysqli_stmt` `mysqli_prepare` `mysqli` `link` `string` `query`

Prepares the SQL query, and returns a statement handle to be used for further operations on the statement. The query must consist of a single SQL statement.

The parameter markers must be bound to application variables using `mysqli_stmt_bind_param` and/or `mysqli_stmt_bind_result` before executing the statement or fetching rows.

&reftitle.parameters;

&mysqli.link.description;

`query`

- The query, as a string.

  You should not add a terminating semicolon or `\g` to the statement.

  This parameter can include one or more parameter markers in the SQL statement by embedding question mark (`?`) characters at the appropriate positions.

  The markers are legal only in certain places in SQL statements. For example, they are allowed in the `VALUES()` list of an `INSERT` statement (to specify column values for a row), or in a comparison with a column in a `WHERE` clause to specify a comparison value.

  However, they are not allowed for identifiers (such as table or column names), in the select list that names the columns to be returned by a `SELECT` statement, or to specify both operands of a binary operator such as the `=` equal sign. The latter restriction is necessary because it would be impossible to determine the parameter type. It's not allowed to compare marker with `NULL` by `? IS NULL` too. In general, parameters are legal only in Data Manipulation Language (DML) statements, and not in Data Definition Language (DDL) statements.

&reftitle.returnvalues;

`mysqli_prepare` returns a statement object or &false; if an error occurred.

&reftitle.examples;

### `mysqli::prepare` example

&style.oop;

    <?php
    $mysqli = new mysqli("localhost", "my_user", "my_password", "world");

    /* check connection */
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }

    $city = "Amersfoort";

    /* create a prepared statement */
    if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {

        /* bind parameters for markers */
        $stmt->bind_param("s", $city);

        /* execute query */
        $stmt->execute();

        /* bind result variables */
        $stmt->bind_result($district);

        /* fetch value */
        $stmt->fetch();

        printf("%s is in district %s\n", $city, $district);

        /* close statement */
        $stmt->close();
    }

    /* close connection */
    $mysqli->close();
    ?>

&style.procedural;

    <?php
    $link = mysqli_connect("localhost", "my_user", "my_password", "world");

    /* check connection */
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }

    $city = "Amersfoort";

    /* create a prepared statement */
    if ($stmt = mysqli_prepare($link, "SELECT District FROM City WHERE Name=?")) {

        /* bind parameters for markers */
        mysqli_stmt_bind_param($stmt, "s", $city);

        /* execute query */
        mysqli_stmt_execute($stmt);

        /* bind result variables */
        mysqli_stmt_bind_result($stmt, $district);

        /* fetch value */
        mysqli_stmt_fetch($stmt);

        printf("%s is in district %s\n", $city, $district);

        /* close statement */
        mysqli_stmt_close($stmt);
    }

    /* close connection */
    mysqli_close($link);
    ?>

&examples.outputs;

    Amersfoort is in district Utrecht

&reftitle.seealso;

- `mysqli_stmt_execute`
- `mysqli_stmt_fetch`
- `mysqli_stmt_bind_param`
- `mysqli_stmt_bind_result`
- `mysqli_stmt_close`