我正在更新 mysqli 数据库查询以使用准备好的语句。这是当前的 PHP 代码:
$randomQQuery = "SELECT question FROM question WHERE tagOne='".$sub."' ORDER BY RAND() LIMIT 1";
$randomQ = mysqli_query($dbc,$randomQQuery);
$qRow = mysqli_fetch_array($randomQ);
$question = $qRow['question'];
这是我最初准备好的声明尝试:
$randomQQuery = $dbc->prepare("SELECT question FROM question WHERE tagOne=? ORDER BY RAND() LIMIT 1");
$randomQQuery->bind_param('s',$sub);
$randomQQuery->execute();
$qRow = $randomQQuery->fetch_array();
$question = $qRow['question'];
- 我需要将变量命名为 $stmt 吗?我看过的所有示例都使用该名称。
- 如果是这样,我如何区分大量 SQL 查询和使用第二个不同的 $stmt?
- 我是否正确获取数组并获取 $question?我知道“绑定(bind)结果”是一种选择;这些是从安全角度来看的最佳实践还是只是更有效?
最佳答案
1 - 不是真的,事实上你甚至没有将它命名为 $stmt?
2 - 从 #1 开始就不需要了;)
3 - 没关系...不是很好,一切取决于您的需求
您所做的仅对 1 行有效,否则您至少需要一段时间
while($row = $result->fetch_array())
{
$rows[] = $row;
}
最佳实践至少会验证执行没有返回 false..
默认情况下,它使用 MYSQL_BOTH 为您提供数组和编号数组。如果您不需要两者,则可以使用其中之一来节省一点内存:
/* numeric array */
$row = $result->fetch_array(MYSQLI_NUM);
printf ("%s (%s)\n", $row[0], $row[1]);
/* associative array */
$row = $result->fetch_array(MYSQLI_ASSOC);
printf ("%s (%s)\n", $row["Name"], $row["CountryCode"]);
关于PHP 准备好的语句。 $stmt, fetch_array(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21099425/