Чем отличаются подготовленные операторы от mysqli_query? - PullRequest
3 голосов
/ 27 декабря 2011

Я прочитал книгу о PHP и MySQL.подготовленный оператор использует двоичный протокол, но в mysqli отсутствует эта функция.Также я прочитал, что подготовленные операторы могут быть кэшированы (их план выполнения) и быстрее, чем mysqli_query и, конечно, безопаснее?когда мы должны использовать подготовленные операторы, а когда mysqli_query?

EDIT
Давайте предположим, что у меня есть следующий запрос:

echo "<table>";  
echo "<tr class ='tablehead'><td>Name</td><td>Location</td><td>Review</td><td>Image</td>  <td>Thumb</td></tr>";  
while ($row = mysql_fetch_array($query))  
{     
   echo "<tr>";  
   echo "<td>" . $row['user_fname'] . "</td>";  
   echo "<td>" . $row['user_location'] . "</td>";  
   echo "<td>" . $row['user_review'] . "</td>";  
   echo "<td>" . $row['user_image'] . "</td>";  
   echo "<td>" . $row['user_thumb'] . "</td>";  
   echo "</tr>";  
}  
echo "</table>";  

Какой подход является лучшим здесь?

1 Ответ

4 голосов
/ 27 декабря 2011

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

Что касается производительности, нужно подумать о затратах на разбор SQL, создание плана запроса и фазу выборки результата в сравнении со стоимостью выполнения запроса: если ввод / вывод в последнем доминирует (как это часто бывает), вы получаете очень мало из приготовленных блюд или mysqli.

Для простых повторяющихся запросов - как это часто используется в более простой части веб-приложений - кэш запросов MySQL работает для запросов с точно таким же и полным текстом SQL , поэтому подготовленные запросы не будут его использовать. По моему опыту, это может более чем свести на нет любое преимущество в производительности подготовленных запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...