2015-01-02 2 views
1

Я прочитал, как параметризованные запросы являются способом продвижения вперед в отношении предотвращения инъекции SQL, однако, к моему удивлению, это кажется более сложным для реализации, чем я себе представлял.Является ли mysqlnd необходимым для SQLi параметризованных запросов в PHP?

Я попытался выполнить простой оператор SELECT, используя mysqli в PHP, используя параметризованный запрос, и я получаю фатальную ошибку PHP, заявив, что я вызвал неизвестный метод при попытке получить результат запроса. После Googling он заявляет, что мне нужно установить mysqlnd и включить его для получения результата. Я также обнаружил, что mysqlnd должен быть установлен по умолчанию на PHP 5.4 или новее. В настоящее время я использую 5.4.3, поэтому я ожидал, что он сработает.

Во-первых, необходимо ли мне mysqlnd использовать параметризованные запросы или это необходимо только для более продвинутых пользователей и запросов? Есть ли метод, который вы можете использовать без mysqlnd для получения результата? Во-вторых, если мне это нужно, как мне включить его на моем 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 Fatal error: Call to undefined method mysqli_stmt::get_result()

+0

Можем ли мы увидеть ваш код, отредактированный в вопрос? Какой метод неизвестен? – halfer

+0

@halfer добавил код и сообщение об ошибке. – user3054325

ответ

0

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

Available only with mysqlnd.

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

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

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

Смежные вопросы