1

我已经阅读了参数化查询是如何预防 SQL 注入的,但令我惊讶的是,它的实现似乎比我想象的要复杂。

我尝试使用参数化查询在 PHP 中使用 mysqli 执行一个简单的 SELECT 语句,但我收到了一个致命的 PHP 错误,指出我在尝试检索查询结果时调用了一个未知方法。谷歌搜索后,它指出我需要mysqlnd安装并启用才能检索结果。我还发现mysqlnd应该默认安装在 PHP 5.4 或更高版本上。不过,我目前使用的是 5.4.3,所以我希望它可以工作。

首先,我是否需要 mysqlnd使用参数化查询,或者这只需要更高级的用户和查询?有没有可以在没有 mysqlnd 的情况下使用的方法来检索结果?其次,如果我确实需要它,如何在我的 PHP 中启用它?

PHP:

$stmt = $con->prepare("SELECT some_id FROM some_table WHERE name = ? AND user_id = '$user_id'");
$stmt->bind_param('s', $name);
$stmt->execute();

$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
    // do something with result
}

错误:

PHP 致命错误:调用未定义的方法 mysqli_stmt::get_result()

4

1 回答 1

0

如果您查看手册get_result,它确实说它需要mysqlnd扩展名:

仅适用于 mysqlnd。

如果您只是想从SELECT查询中获取结果,则可以使用输出参数绑定,其基础是bind_result. 这似乎不需要额外的扩展。

在此处的 PHP 手册中有一些关于如何执行此操作的示例。我想这样做的好处get_result是您可以在不绑定列的情况下阅读它们。您应该能够在您的php.ini- 也许默认情况下将其注释掉?

正如我所看到的,我没有亲自使用过 MySQLi,在 Stack Overflow 上的帮助中,许多人对 API 感到沮丧。我一直使用 PDO/mysql 并认为没有理由切换。可能值得一试,看看你是否喜欢它。

于 2015-01-03T14:08:01.310 回答