哪个是执行Select查询并使用Prepared语句获取结果的最佳方法?

时间:2016-11-18 06:28:23

标签: php select mysqli prepared-statement

我对这些执行选择查询的方法感到困惑,任何人都可以帮助区分这些方法,并解释哪些方法更好。

第一种方法

$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
}

第二种方法

$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 %s\n", $city, $district);

1 个答案:

答案 0 :(得分:1)

这三个用于不同的目的

  • 第一个用于从准备好的语句中获取多个结果。请注意,此行为无法保证。
  • 第二个用于在没有预备陈述的情况下获得多个结果
  • 第三个用于从准备好的陈述中获得单个结果

从这一切可以看出,执行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 tutorial,我强烈推荐。