веб-приложения — нужно ли mysqlnd для параметризованных запросов SQLi в PHP?

Я прочитал о том, как параметризованные запросы являются способом предотвращения внедрения SQL-кода, однако, к моему удивлению, его реализация сложнее, чем я предполагал.

Я попытался выполнить простое выражение SELECT, используя mysqli в PHP, используя параметризованный запрос, и я получаю фатальную ошибку 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 ()

1

Решение

Если вы посмотрите на руководство для get_result, это действительно говорит, что нужно mysqlnd расширение:

Доступно только с mysqlnd.

Если вы просто хотите получить результаты из SELECT запрос, вы можете использовать привязку выходного параметра, основой которого является bind_result. Это, кажется, не нуждается в дополнительном расширении.

Есть несколько примеров того, как это сделать, в Руководство по PHP здесь. Я предполагаю пользу get_result является то, что вы можете читать столбцы, не связывая их. Вы должны иметь возможность включить это в вашем php.ini — возможно, это закомментировано по умолчанию?

Я лично не использовал MySQLi, как я видел, из-за помощи в переполнении стека многие люди разочаровываются в API. Я всегда использовал PDO / mysql и не вижу причин для переключения. Возможно, стоит попробовать, чтобы увидеть, если вы предпочитаете.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]