PHP 准备好的语句。 $stmt, fetch_array()

标签 php mysqli prepared-statement

我正在更新 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'];
  1. 我需要将变量命名为 $stmt 吗?我看过的所有示例都使用该名称。
  2. 如果是这样,我如何区分大量 SQL 查询和使用第二个不同的 $stmt?
  3. 我是否正确获取数组并获取 $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"]);

引用:https://www.php.net/mysqli_fetch_array

关于PHP 准备好的语句。 $stmt, fetch_array(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21099425/

相关文章:

php - 流式传输 ASF 文件需要哪些 HTTP header ?

java - 当我第一次按下将我连接到 SQL Server 2012 数据库并执行特定查询的 JFXButton 时,为什么会出现延迟?

php - 订购带有小数和非小数的 varchar 字段

javascript - 从电脑获取当前时间并将其保存在数据库中

php - Ratchet ,在连接关闭时获取客户端的主题

php - 清理整数时使用 intval 和 real_escape_string

php - 将查询错误转换为 MySQLi 中的异常

php - mysqli prepare and insert statements using variables插入值和变量语法错误

java - Java 中转义双引号 Oracle 准备好的语句

php - 如何使用准备好的语句将 boolean 值放入 mysql 数据库中?