2015-06-18 2 views
0

который быстрее:, который быстрее mysqli_prepare или mysqli_query?

1.

$name = $sql->real_escape_string($_POST['name']); 
$age = $sql->real_escape_string($_POST['age']); 
$email = $sql->real_escape_string($_POST['email']); 

$query = "INSERT INTO `tablename` VALUES ('$name','$age','$email');"; 

$sql->query($query) or die($query.'<br />'.$sql->error); 

2.

$name = $_POST['name']; 
    $age = $_POST['age']; 
    $email = $_POST['email']; 

    $query = $sql->prepare("INSERT INTO `tablename` VALUES ('?','?','?');"); 

    $query->bind_param("sis",$name,$age,$email); 
    $query->execute(); 

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

Это правда, если база данных mysql не находится на сервере localhost.

Это утверждение верно? спасибо

+0

Не совсем правильно, нет .... интерфейс MySQLi достаточно умен, чтобы отправлять только значения из параметров связывания с сервером базы данных один раз, на exeute насколько мне известно ... и наносекундное различие в производительности (даже на удаленном сервере базы данных) не следует считать более важным, чем правильно защищать ваш код ..... тем более, что вы можете использовать тот же подготовленный оператор несколько раз с разными значениями привязки, что делает его более быстрым в этом обстоятельстве –

+0

И вы уже должны были подключиться к базе данных, поэтому не должно быть времени на соединение, связанное с 'prepare()'/'bind()'/'execute()' (или действительно в 'query()') –

+0

@MarkBake Благодарю вас за вашу ответственность, да, и там не будет больше связи. но команда подготовки отправит запрос в базу данных, и я обращаюсь к этому времени запроса. – david

ответ

0

Фактическая цель использования подготовленного оператора в sql - сократить затраты на обработку запросов; НЕ отделять данные от запроса. Вот как он используется w/php NOW, а не как он был разработан для использования в первую очередь. С SQL вы сокращаете стоимость выполнения нескольких похожих запросов вниз с помощью подготовленного оператора. Выполнение этого алгоритма устраняет синтаксический анализ, проверку и чаще всего формирует план выполнения для указанного запроса. Вот почему они работают быстрее в цикле, чем их кумиры IMMEDIATE Query. Не предполагайте, что только потому, что кто-то использует php, и эта функция не означает, что это способ, или только способ сделать это. Хотя это более безопасно, чем общие запросы, но они также более ограничены в том, что они могут делать, или точнее, как вы можете это делать.

Я думаю, что ниже реф ссылке будет полезна для Вас: http://code.tutsplus.com/tutorials/pdo-vs-mysqli-which-should-you-use--net-24059

+0

благодарю вас за ваш ответ, но случай, о котором вы говорили, редко, обычно, если я выполняю один запрос. я не буду его повторять. – david

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