Copyright 1997-2022 the PHP Documentation Group.
mysqli_stmt::bind_param
mysqli_stmt_bind_param
Binds variables to a prepared statement as parameters
Description
Object-oriented style
public bool mysqli_stmt::bind_param(string types,
mixed var,
mixed vars);
Procedural style
bool mysqli_stmt_bind_param(mysqli_stmt statement,
string types,
mixed var,
mixed vars);
Bind variables for the parameter markers in the SQL statement
prepared by
mysqli_prepare
or
mysqli_stmt_prepare
.
If data size of a variable exceeds max. allowed packet size
(max_allowed_packet), you have to specify b
in types
and use
mysqli_stmt_send_long_data
to send the data in packets.
Care must be taken when using
mysqli_stmt_bind_param
in conjunction with
call_user_func_array
.
Note that
mysqli_stmt_bind_param
requires parameters to be passed by reference, whereas
call_user_func_array
can accept as a parameter a list of variables that can
represent references or values.
Parameters
-
statement
Procedural style only: A
mysqli_stmt
object returned bymysqli_stmt_init
.-
types
A string that contains one or more characters which specify the types for the corresponding bind variables:
Table 3.15 Type specification chars
Character Description i corresponding variable has type integer d corresponding variable has type double s corresponding variable has type string b corresponding variable is a blob and will be sent in packets
-
var
,vars
The number of variables and length of string
types
must match the parameters in the statement.
Return Values
Returns true
on success or
false
on failure.
Examples
Example 3.71 mysqli_stmt::bind_param
example
Object-oriented style
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');
$stmt = $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
$stmt->bind_param('sssd', $code, $language, $official, $percent);
$code = 'DEU';
$language = 'Bavarian';
$official = "F";
$percent = 11.2;
$stmt->execute();
printf("%d row inserted.\n", $stmt->affected_rows);
/* Clean up table CountryLanguage */
$mysqli->query("DELETE FROM CountryLanguage WHERE Language='Bavarian'");
printf("%d row deleted.\n", $mysqli->affected_rows);
Procedural style
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = mysqli_connect('localhost', 'my_user', 'my_password', 'world');
$stmt = mysqli_prepare($link, "INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
mysqli_stmt_bind_param($stmt, 'sssd', $code, $language, $official, $percent);
$code = 'DEU';
$language = 'Bavarian';
$official = "F";
$percent = 11.2;
mysqli_stmt_execute($stmt);
printf("%d row inserted.\n", mysqli_stmt_affected_rows($stmt));
/* Clean up table CountryLanguage */
mysqli_query($link, "DELETE FROM CountryLanguage WHERE Language='Bavarian'");
printf("%d row deleted.\n", mysqli_affected_rows($link));
The above examples will output:
1 row inserted. 1 row deleted.
Example 3.72 Using ...
to provide arguments
The ...
operator can be used to provide
variable-length argument list, e.g. in a WHERE
IN
clause.
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');
$stmt = $mysqli->prepare("SELECT Language FROM CountryLanguage WHERE CountryCode IN (?, ?)");
/* Using ... to provide arguments */
$stmt->bind_param('ss', ...['DEU', 'POL']);
$stmt->execute();
$stmt->store_result();
printf("%d rows found.\n", $stmt->num_rows());
The above examples will output:
10 rows found.
See Also
mysqli_stmt_bind_result
|
mysqli_stmt_execute
|
mysqli_stmt_fetch
|
mysqli_prepare
|
mysqli_stmt_send_long_data
|
mysqli_stmt_errno
|
mysqli_stmt_error
|