如何获取PHP MySQLi预处理查询返回的所有值?
获取MySQLi预处理查询的所有返回值
嘿,我来帮你搞定这个问题!你已经写好了基础的预处理查询代码,现在只需要加几行就能拿到所有返回的bookedseat值了。MySQLi有两种常用的方式来获取预处理语句的结果,我给你详细拆解一下:
方法1:绑定结果变量逐行读取
这种方式需要先把查询结果的字段绑定到变量,再循环读取每一行数据,适合简单的单字段查询:
<?php $mysqli = new mysqli("localhost", "root", "", "titan3d"); if (mysqli_connect_error()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } $sdate = ""; $stime = ""; if(isset($_POST['sdate'])) { $sdate = $_POST["sdate"]; } if(isset($_POST['stime'])) { $stime = $_POST["stime"]; } // 初始化预处理语句 $statement = $mysqli->prepare("SELECT bookedseat FROM bookings WHERE sdate = ? AND stime = ?"); // 绑定参数:注意"si"对应字符串+整数,要确保stime确实是整数类型,否则改成"ss" $statement->bind_param("si", $sdate, $stime); // 执行查询并处理错误 if (!$statement->execute()) { trigger_error('查询执行失败: ' . $statement->error); } // 把查询到的bookedseat字段绑定到$bookedSeat变量 $statement->bind_result($bookedSeat); // 用数组存储所有结果 $allBookedSeats = []; // 循环读取每一行,直到没有更多数据 while ($statement->fetch()) { $allBookedSeats[] = $bookedSeat; } // 现在$allBookedSeats里就是所有返回的bookedseat值了,打印看看: print_r($allBookedSeats); // 记得关闭语句和数据库连接,避免资源浪费 $statement->close(); $mysqli->close(); ?>
方法2:获取结果集对象(更灵活)
如果你想以关联数组的形式处理结果,或者后续要做更复杂的操作,可以用get_result()拿到结果集对象,再一次性获取所有数据:
<?php $mysqli = new mysqli("localhost", "root", "", "titan3d"); if (mysqli_connect_error()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } $sdate = ""; $stime = ""; if(isset($_POST['sdate'])) { $sdate = $_POST["sdate"]; } if(isset($_POST['stime'])) { $stime = $_POST["stime"]; } $statement = $mysqli->prepare("SELECT bookedseat FROM bookings WHERE sdate = ? AND stime = ?"); $statement->bind_param("si", $sdate, $stime); if (!$statement->execute()) { trigger_error('查询执行失败: ' . $statement->error); } // 获取完整的结果集对象 $result = $statement->get_result(); // 一次性取出所有行,MYSQLI_ASSOC表示返回关联数组格式 $allBookedSeats = $result->fetch_all(MYSQLI_ASSOC); // 结果会是类似这样的结构:[{"bookedseat": "座位1"}, {"bookedseat": "座位2"}...] print_r($allBookedSeats); // 关闭相关资源 $result->close(); $statement->close(); $mysqli->close(); ?>
小提醒
- 一定要确认参数类型
"si"是否正确:如果你的stime是字符串类型(比如时间格式字符串),记得改成"ss",否则会导致查询出错。 - 操作完成后记得关闭语句和连接,养成良好的资源管理习惯。
内容的提问来源于stack exchange,提问作者Ajitha Malkanthi
相关产品推荐
相关产品推荐

