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() 返回连接中最后一次查询的警告数量。