预处理语句要点
- mysqli_prepare($conn, $sql) 编译带 ? 的语句模板
- mysqli_stmt_bind_param 第二个参数是类型:i 整型 d 浮点 s 字符串
- 绑参顺序要和 ? 一一对应,类型写错会静默出错
- mysqli_stmt_execute 执行,mysqli_stmt_get_result 取结果
- 预处理语句能复用,同一模板反复绑不同值更快
- 用户输入一律走预处理,别用字符串拼接
预处理语句示例
$conn = mysqli_connect("127.0.0.1", "app_user", "app_pass", "shop_db");
$stmt = mysqli_prepare($conn, "SELECT order_id, amount FROM orders WHERE user_id = ?");
mysqli_stmt_bind_param($stmt, "i", $uid);
$uid = 1;
mysqli_stmt_execute($stmt);
$res = mysqli_stmt_get_result($stmt);
while ($row = mysqli_fetch_assoc($res)) {
echo $row["order_id"] . "\n";
}
mysqli_stmt_close($stmt);
mysqli_close($conn);
避坑提醒:类型字符写错比写少更隐蔽:比如把价格写成 s(字符串)去比大小,可能永远匹配不上,务必按真实类型填。