mysql使用数据库预处理_MySQL数据库之预处理

预处理

概念

每个代码的段的执行都要经历

词法分析——语法分析——编译——执行

预编译一次,可以多次执行

用来解决一条SQL语句频繁执行的问题

语法

预处理语句:prepare 预处理名字 from ‘sql语句’

执行预处理:execute 预处理名字 [using 变量]

MySQL中变量以@开头

通过set给变量赋值

?是位置占位符

不带参数的预处理

MariaDB [sel]> prepare stmt from 'select * from grades';

# `Query OK, 0 rows affected (0.007 sec)`

# `Statement prepared`

MariaDB [sel]> execute stmt;

+-------+------+---------+------+

| name | sex | chinese | math |

+-------+------+---------+------+

| Sunny | boy | 93 | 96 |

| Jerry | boy | 97 | 91 |

| Marry | girl | 95 | 94 |

| Tommy | boy | 98 | 94 |

+-------+------+---------+------+

# `4 rows in set (0.000 sec)`

带一个参数的预处理

MariaDB [sel]> prepare stmt from 'select * from grades where name=?';

# `Query OK, 0 rows affected (0.000 sec)`

# `Statement prepared`

MariaDB [sel]> delimiter //

MariaDB [sel]> set @name='Sunny';

-> execute stmt using @name //

# `Query OK, 0 rows affected (0.007 sec)`

+-------+------+---------+------+

| name | sex | chinese | math |

+-------+------+---------+------+

| Sunny | boy | 93 | 96 |

+-------+------+---------+------+

# `1 row in set (0.008 sec)`

传递多个参数

MariaDB [sel]> prepare stmt from 'select * from grades where chinese and sex=?' //

# `Query OK, 0 rows affected (0.000 sec)`

# `Statement prepared`

MariaDB [sel]> set @chinese=97;

-> set @sex='boy';

-> execute stmt using @chinese,@sex //

# `Query OK, 0 rows affected (0.000 sec)`

# `Query OK, 0 rows affected (0.001 sec)`

+-------+------+---------+------+

| name | sex | chinese | math |

+-------+------+---------+------+

| Sunny | boy | 93 | 96 |

+-------+------+---------+------+

# `1 row in set (0.007 sec)`

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用mysqli_stmt类处理SELECT查询结果需要经过以下几个步骤: 1. 准备预处理语句:使用mysqli_prepare()函数准备预处理语句。 2. 绑定参数(如果有):如果预处理语句中有占位符,需要使用mysqli_stmt_bind_param()函数将参数绑定到占位符上。 3. 执行预处理语句:使用mysqli_stmt_execute()函数执行预处理语句。 4. 获取结果集:使用mysqli_stmt_get_result()函数获取结果集。 5. 遍历结果集:使用mysqli_fetch_array()、mysqli_fetch_assoc()等函数遍历结果集,获取每一行数据。 下面是一个示例代码: ``` // 连接数据库 $mysqli = new mysqli("localhost", "user", "password", "database"); // 准备预处理语句 $stmt = mysqli_prepare($mysqli, "SELECT * FROM users WHERE id > ?"); // 绑定参数 $id = 2; mysqli_stmt_bind_param($stmt, "i", $id); // 执行预处理语句 mysqli_stmt_execute($stmt); // 获取结果集 $result = mysqli_stmt_get_result($stmt); // 遍历结果集 while ($row = mysqli_fetch_assoc($result)) { echo "id: " . $row["id"] . ", name: " . $row["name"] . "<br>"; } // 关闭预处理语句和数据库连接 mysqli_stmt_close($stmt); mysqli_close($mysqli); ``` 在该示例中,我们使用mysqli_prepare()函数准备了一条预处理语句,该语句查询了id大于2的用户信息。接着,我们使用mysqli_stmt_bind_param()函数将参数2绑定到了占位符上。然后,使用mysqli_stmt_execute()函数执行了预处理语句,并使用mysqli_stmt_get_result()函数获取了结果集。最后,我们使用mysqli_fetch_assoc()函数遍历了结果集,将每一行数据输出到了页面上。最后,我们关闭了预处理语句和数据库连接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值