PDO如何实现可复用的返回/输出命令代码结构?
方案1:一次性加载所有需要的文本(推荐)
你可以直接利用PDO自带的PDO::FETCH_KEY_PAIR获取模式,直接生成以id为键、text字段为值的数组,完全符合你想要的调用方式:
// 查询所有id和对应文本 $stmt = $db->query("SELECT id, text FROM texts"); $texts = $stmt->fetchAll(PDO::FETCH_KEY_PAIR);
之后就可以直接通过id取值:
echo $texts[1]; // 输出 Hello. echo $texts[2]; // 输出 Welcome to my echo $texts[3]; // 输出 website.
如果只需要查询指定的部分id,可以用预处理的IN语句避免SQL注入:
$needIds = [1,2,3]; $placeholders = implode(',', array_fill(0, count($needIds), '?')); $stmt = $db->prepare("SELECT id, text FROM texts WHERE id IN ($placeholders)"); $stmt->execute($needIds); $texts = $stmt->fetchAll(PDO::FETCH_KEY_PAIR);
方案2:封装函数随用随取
如果不想一次性加载所有数据,可以封装一个带缓存的查询函数,避免重复查询同一个id:
function getText(int $id, PDO $db): string { // 静态变量缓存已经查询过的内容,同一个id不会重复查库 static $cache = []; if (!isset($cache[$id])) { $stmt = $db->prepare("SELECT text FROM texts WHERE id = ?"); $stmt->execute([$id]); $cache[$id] = $stmt->fetchColumn() ?: ''; } return $cache[$id]; }
调用方式非常简单:
echo getText(1, $db); echo getText(2, $db); echo getText(3, $db);
PDO::FETCH_KEY_PAIR的作用就是将查询结果的第一列作为数组键,第二列作为对应的值,不需要你手动循环组装数组,是实现你需求的最优原生方案。
内容的提问来源于stack exchange,提问作者Deniz Şafak
相关产品推荐
相关产品推荐

