У меня есть запрос здесь (PHP с Zend Framework в базе данных MySQL), используя один параметр POST в качестве аргумента в SQL-заявлении.Метод mysql_real_escape_string действительно медленный (почти 1 секунда)
Итак, у меня есть локальная установка XAMPP на моей машине разработки, а время выполнения этого маленького скрипта - это что-то вроде 150 мс независимо от того, передаю ли я аргумент с или без использования mysql_real_escape_string() в этом аргументе раньше.
Затем у меня есть виртуальный сервер с установленным BitNami-WAMP-Stack. Когда я запускаю сценарий там (100% то же содержимое базы данных), он занимает около 260 мс без mysql_real_escape_string, это не так «быстро» (я знаю, что 150 мс вообще не очень быстро) в качестве моей локальной машины, но все будет в порядке. Но если я добавлю только один mysql_real_escape_string() к аргументу из переменной POST, все это займет 1,2 секунды.
И еще я заметил, что каждый вызов mysql_real_escape_string заставляет скрипт работать на 1 секунду медленнее на виртуальном сервере. На моей локальной машине это не имеет никакого эффекта.
Как это может быть? Является ли это установкой MySQL или вещью PHP.ini или что? Поскольку у меня есть 100% -ная база данных и источник PHP на обеих машинах, я думаю, это может быть только параметризация?
Спасибо за любую помощь заранее!
EDIT:
Так вот что я делаю, первое подключение к БД (в Bootstrap.php):
$GLOBALS["db"]= new Zend_Db_Adapter_Pdo_Mysql(array(
'host' => "localhost",
'username' => "user",
'password' => "password",
'dbname' => "database"
));
А потом в нужде для запроса к базе данных:
global $db;
$query = sprintf("SELECT * FROM table WHERE id = '%s'", mysql_real_escape_string($id));
$db->query("SET NAMES 'utf8'");
$db->fetchAll($query);
Я только что сделал еще одно испытание: когда я добавляю эту простую тестовую строку в свой код, это делает скрипт ~ 600 мс медленнее на виртуальной машине:
mysql_real_escape_string("TEST");
Можете ли вы показать нам код для создания и выполнения запроса? Также работает ли БД на одном физическом/виртуальном? – prodigitalson
Каков размер (в символах) строки, которую вы ускользаете? –
Строка i amcapcap - это только идентификатор базы данных int длиной от 2 до 5 цифр – homtg