mysqli_stmt::prepare
mysqli_stmt::prepare
mysqli_stmt_prepare
(PHP 5, PHP 7)
mysqli_stmt :: prepare - mysqli_stmt_prepare - 准备执行的SQL语句
描述
面向对象的风格
mixed mysqli_stmt::prepare ( string $query )
程序风格
bool mysqli_stmt_prepare ( mysqli_stmt $stmt , string $query )
准备由空终止的字符串查询指向的SQL查询。
在执行语句或读取行之前,必须使用mysqli_stmt_bind_param()和/或mysqli_stmt_bind_result()将参数标记绑定到应用程序变量。
注意
:如果将语句传递给服务器的max_allowed_packet
的mysqli_stmt_prepare()
,则返回的错误代码根据您使用的是MySQL本机驱动程序(mysqlnd
)还是MySQL客户端库(libmysqlclient
)而不同。行为如下:
- Linux上的
mysqlnd
返回一个1153的错误代码。错误消息表示“得到的数据包大于max_allowed_packet
字节”。
- Windows上的
mysqlnd
返回错误代码2006.此错误消息意味着“服务器已经消失”。
- 所有平台上的libmysqlclient都会返回错误代码2006.此错误消息表示“服务器已经消失”。参数`stmt`仅限过程风格:由mysqli_stmt_init()返回的语句标识符。 query 查询,作为一个字符串。它必须由单个SQL语句组成。通过在适当的位置嵌入问号(?)字符,可以在SQL语句中包含一个或多个参数标记。 注意:您不应该在语句中添加终止分号或\ g。 注意:标记仅在SQL语句中的某些地方合法。例如,它们可以在INSERT语句的VALUES()列表中(用于指定行的列值)或与WHERE子句中的列进行比较以指定比较值。但是,它们不允许用于标识(例如表名或列名),SELECT列表中的名称将由SELECT语句返回的列),或者指定二元运算符(例如=等号)的两个操作数。后一种限制是必要的,因为不可能确定参数类型。通常,参数只在数据操纵语言(DML)语句中合法,而不在数据定义语言(DDL)语句中合法。返回值TRUE成功或返回FALSE失败。示例示例#1面向对象的样式 <?php $ mysqli = new mysqli(“localhost”,“my_user”,“my_password”,“world”); / *检查连接* / if(mysqli_connect_errno()){printf(“连接失败:%s \ n”,mysqli_connect_error()); 出口(); } $ city =“Amersfoort”; / *创建一个准备好的语句* / $ stmt = $ mysqli-> stmt_init(); 如果($ stmt-> prepare(“SELECT区域从城市WHERE名称=?”)){/ *绑定标记参数* / $ stmt-> bind_param(“s”,$ city); / *执行查询* / $ stmt-> execute(); / *绑定结果变量* / $ stmt-> bind_result($ district); / *提取值* / $ stmt-> fetch(); printf(“%s在分区%s \ n”,$ city,$分区); / * close语句* / $ stmt-> close(); } / *关闭连接* / $ mysqli-> close(); ?>示例#2程序风格<?php $ link = mysqli_connect(“localhost”,“my_user”,“my_password”,“world”); / *检查连接* / if(mysqli_connect_errno()){printf(“连接失败:%s \ n”,mysqli_connect_error()); 出口(); } $ city =“Amersfoort”; / *创建一个准备好的语句* / $ stmt = mysqli_stmt_init($ link); 如果(mysqli_stmt_prepare($ stmt,'SELECT区域从城市WHERE名称=?')){/ *绑定标记参数* / mysqli_stmt_bind_param($ stmt,“s”,$ city); / *执行查询* / mysqli_stmt_execute($ stmt); / *绑定结果变量* / mysqli_stmt_bind_result($ stmt,$ district); / *提取值* / mysqli_stmt_fetch($ stmt); printf(“%s在分区%s \ n”,$ city,$分区); / *关闭语句* / mysqli_stmt_close($ stmt); } / *关闭连接* / mysqli_close($ link); ?>上面的例子将输出:阿默斯福特是在区乌得勒支另请参见
- mysqli_stmt_init() - 初始化一个语句并返回一个用于mysqli_stmt_prepare的对象
- mysqli_stmt_execute() - 执行准备好的查询
- mysqli_stmt_fetch() - 从准备好的语句中获取结果到绑定变量中
- mysqli_stmt_bind_param() - 将变量作为参数绑定到准备好的语句
- mysqli_stmt_bind_result() - 将变量绑定到准备好的语句以存储结果
- mysqli_stmt_get_result() - 从预处理语句中获取结果集
- mysqli_stmt_close() - 关闭预准备语句
← mysqli_stmt::$param_count
mysqli_stmt::reset →