mysqli预处理prepare的相关函数

预处理语句对于防止 MySQL 注入是非常有用的。

PHP官方代码示例:

面向对象风格

 1 <?php
 2 $mysqli = new mysqli("localhost", "my_user", "my_password", "world");
 3 
 4 /* check connection */
 5 if (mysqli_connect_errno()) {
 6     printf("Connect failed: %s\n", mysqli_connect_error());
 7     exit();
 8 }
 9 
10 $city = "Amersfoort";
11 
12 /* create a prepared statement */
13 if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {
14 
15     /* bind parameters for markers */
16     $stmt->bind_param("s", $city);
17 
18     /* execute query */
19     $stmt->execute();
20 
21     /* bind result variables */
22     $stmt->bind_result($district);
23 
24     /* fetch value */
25     $stmt->fetch();
26 
27     printf("%s is in district %s\n", $city, $district);
28 
29     /* close statement */
30     $stmt->close();
31 }
32 
33 /* close connection */
34 $mysqli->close();
35 ?>

面向过程风格

 1 <?php
 2 $link = mysqli_connect("localhost", "my_user", "my_password", "world");
 3 
 4 /* check connection */
 5 if (mysqli_connect_errno()) {
 6     printf("Connect failed: %s\n", mysqli_connect_error());
 7     exit();
 8 }
 9 
10 $city = "Amersfoort";
11 
12 /* create a prepared statement */
13 if ($stmt = mysqli_prepare($link, "SELECT District FROM City WHERE Name=?")) {
14 
15     /* bind parameters for markers */
16     mysqli_stmt_bind_param($stmt, "s", $city);
17 
18     /* execute query */
19     mysqli_stmt_execute($stmt);
20 
21     /* bind result variables */
22     mysqli_stmt_bind_result($stmt, $district);
23 
24     /* fetch value */
25     mysqli_stmt_fetch($stmt);
26 
27     printf("%s is in district %s\n", $city, $district);
28 
29     /* close statement */
30     mysqli_stmt_close($stmt);
31 }
32 
33 /* close connection */
34 mysqli_close($link);
35 ?>

参数有以下四种类型:

  • i - integer(整型)
  • d - double(双精度浮点型)
  • s - string(字符串)
  • b - BLOB(binary large object:二进制大对象)

每个参数都需要指定类型。

以下为一些mysqli常用函数。

mysqli_fetch_field_direct() 以对象返回结果集中单字段的元数据。
mysqli_fetch_field() 以对象返回结果集中的下一个字段。
mysqli_fetch_fields() 返回代表结果集中字段的对象数组。
mysqli_fetch_lengths() 返回结果集中当前行的列长度。
mysqli_fetch_object() 以对象返回结果集的当前行。
mysqli_fetch_row() 从结果集中抓取一行并以枚举数组的形式返回它。
mysqli_field_count() 返回最近一次查询获取到的列的数目。
mysqli_field_seek() 设置字段指针到特定的字段开始位置。
mysqli_field_tell() 返回字段指针的位置。
mysqli_free_result() 释放与某个结果集相关的内存。
mysqli_get_charset() 返回字符集对象。
mysqli_get_client_info() 返回字符串类型的 Mysql 客户端版本信息。
mysqli_get_client_stats() 返回每个客户端进程的统计信息。
mysqli_get_client_version() 返回整型的 Mysql 客户端版本信息。
mysqli_get_connection_stats() 返回客户端连接的统计信息。
mysqli_get_host_info() 返回 MySQL 服务器主机名和连接类型。
mysqli_get_proto_info() 返回 MySQL 协议版本。
mysqli_get_server_info() 返回 MySQL 服务器版本。
mysqli_get_server_version() 返回整型的 MySQL 服务器版本信息。
mysqli_info() 返回最近一次执行的查询的检索信息。
mysqli_init() 初始化 mysqli 并且返回一个由 mysqli_real_connect() 使用的资源类型。
mysqli_insert_id() 返回最后一次查询中使用的自动生成 id。
mysql_kill() 请求服务器终结某个 MySQL 线程。
mysqli_more_results() 检查一个多语句查询是否还有其他查询结果集。
mysqli_multi_query() 在数据库上执行一个或多个查询。
mysqli_next_result() 从 mysqli_multi_query() 中准备下一个结果集。
mysqli_num_fields() 返回结果集中的字段数。
mysqli_num_rows() 返回结果集中的行数。
mysqli_options() 设置选项。
mysqli_ping() Ping 一个服务器连接,或者如果那个连接断了尝试重连。
mysqli_prepare() 准备一条用于执行的 SQL 语句。
mysqli_query() 在数据库上执行查询。
mysqli_real_connect() 打开一个到 Mysql 服务端的新连接。
mysqli_real_escape_string() 转义在 SQL 语句中使用的字符串中的特殊字符。
mysqli_real_query() 执行 SQL 查询。
mysqli_reap_async_query() 返回异步查询的结果。
mysqli_refresh() 刷新表或缓存,或者重置复制服务器信息。
mysqli_rollback() 回滚当前事务。
mysqli_select_db() 改变连接的默认数据库。
mysqli_set_charset() 设置默认客户端字符集。
mysqli_set_local_infile_default() 清除用户为 load local infile 命令定义的处理程序。
mysqli_set_local_infile_handler() 设置 LOAD DATA LOCAL INFILE 命令执行的回调函数。
mysqli_sqlstate() 返回前一个 Mysql 操作的 SQLSTATE 错误代码。
mysqli_ssl_set() 使用 SSL 建立安装连接。
mysqli_stat() 返回当前系统状态。
mysqli_stmt_init() 初始化一条语句并返回一个由 mysqli_stmt_prepare() 使用的对象。
mysqli_store_result() 传输最后一个查询的结果集。
mysqli_thread_id() 返回当前连接的线程 ID。
mysqli_thread_safe() 返回是否设定了线程安全。
mysqli_use_result() 初始化一个结果集的取回。
mysqli_warning_count() 返回连接中最后一次查询的警告数量。

 

posted @ 2020-05-14 09:29  webmouse  阅读(1062)  评论(1编辑  收藏  举报