如何使用mysqli预处理语句将单列查询结果存储到变量中?
当然可以实现啦!
你当前的代码只能拿到单行数据,是因为fetch()只执行了一次,而且绑定的变量数量也没必要三个(毕竟你只查询了submachine这一列)。想要获取该列的所有行数据,只需要调整逻辑,循环读取每一行的结果并存入数组即可,我给你两种常用的实现方式:
方法一:使用bind_result + 循环读取
这种方式不需要额外扩展支持,兼容性更好:
$sql = "SELECT submachine FROM parts WHERE machine = ?;"; $stmt = $mysqli->prepare($sql); $stmt->bind_param("s", $_GET['q']); $stmt->execute(); // 只需要绑定单列到一个变量即可 $stmt->bind_result($submachine); // 初始化数组来存储所有结果 $submachines = []; // 循环调用fetch(),直到所有行都被读取完毕 while ($stmt->fetch()) { $submachines[] = $submachine; } $stmt->close(); // 现在$submachines就是包含该列所有行数据的一维数组了 print_r($submachines);
原理很简单:每次调用fetch(),mysqli会把当前行的submachine值赋值给绑定的变量$submachine,我们只需要把这个值添加到数组里,直到没有更多行可以读取为止。
方法二:使用get_result() + fetch_all()(推荐,更简洁)
如果你的PHP环境安装了mysqlnd扩展(大部分现代服务器都默认安装了),可以用这种更清爽的方式:
$sql = "SELECT submachine FROM parts WHERE machine = ?;"; $stmt = $mysqli->prepare($sql); $stmt->bind_param("s", $_GET['q']); $stmt->execute(); // 获取完整的结果集对象 $result = $stmt->get_result(); // 直接提取单列数据,返回一维数组 $submachines = $result->fetch_all(MYSQLI_COLUMN); $stmt->close(); print_r($submachines);
这里fetch_all(MYSQLI_COLUMN)会直接把结果集中的单列数据转换成一个一维数组,省去了手动循环的步骤,代码更简洁。
小提示
- 如果没有匹配到任何数据,
$submachines会是一个空数组,你可以根据业务需求做相应的判断处理。 - 你已经用了预处理语句,这很好,能有效防止SQL注入,继续保持👍
内容的提问来源于stack exchange,提问作者Louiee
相关产品推荐
相关产品推荐

