我在执行选择查询的这些方法中感到困惑,谁能帮助区分这些方法并解释其中哪个更好吗?
1的方法
$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?');
$stmt->bind_param('s', $name);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
// do something with $row
}
2方法
$stmt = $dbConnection->query('SELECT * FROM employees');
while($row = $stmt->fetch_assoc()) {
// do something with $row
}
第三方法
$stmt = $dbConnection->prepare("SELECT District FROM City WHERE Name=?")) {
$stmt->bind_param("s", $city);
$stmt->execute();
$stmt->bind_result($district);
$stmt->fetch();
printf("%s is in district %sn", $city, $district);
三者的作用各不相同
- 第一个用于从预处理语句中获取多个结果。请注意,此行为不能保证。
- 第二个用于获得多个结果,而不需要预处理语句
- 第三个用于从准备好的语句 中获取单个结果
从所有这些可以看出,执行Select查询和使用Prepared语句获取结果的最佳方法是使用PDO:
从一个准备好的语句中获取多个结果
$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?');
$stmt->execute([$name]);
while ($row = $stmt->fetch()) {
// do something with $row
}
在没有预处理语句的情况下获得多个结果
$stmt = $dbConnection->query('SELECT * FROM employees');
while($row = $stmt->fetch()) {
// do something with $row
}
从预处理语句中获取单个结果
$stmt = $dbConnection->prepare("SELECT District FROM City WHERE Name=?"));
$stmt->execute([$city]);
$district = $stmt->fetchColumn();
你看,所有的方法都是统一的,不那么冗长,保证工作。我有一个非常好的PDO教程,我强烈推荐。