Вопрос:

Понимание значения между i и s в параметризованных запросах

php mysql

26 просмотра

1 ответ

553 Репутация автора

Я только что выяснил, почему выполнение запроса из моего интерфейса PHP занимало примерно на 50 секунд больше времени, чем когда я запускал его из монитора MySQL, но хотел бы лучше понять последствия. Я использую две переменные, $ extension и $ today и отправляю их в mysql через параметризацию. Когда я выбираю ссылку $ extension как целое число, это занимает очень много времени. Когда я называю это строкой, это довольно мгновенно.

Запрос;

$stmt = $db_conn->prepare(
"select from_unixtime(dateTimeOrigination) as date_of_call_origination ,
callingPartyNumber as calling_party_number, 
originalcalledpartynumber as original_called_party_number, 
finalCalledPartyNumber as final_called_party_number, 
SEC_TO_TIME(duration) as duration, 
origDeviceName, destDeviceName 
from cdr_records 
where (callingPartyNumber= ? or originalcalledpartynumber= ? or finalcalledpartynumber = ?) 
and 
from_unixtime(dateTimeOrigination) between ? and ADDDATE(?, INTERVAL 1 DAY) order by datetimeorigination desc");

Мои обязательные заявления;

оригинал

$stmt->bind_param('iiiss', $extension, $extension, $extension, $today, $today);

Изменился на

$stmt->bind_param('sssss', $extension, $extension, $extension, $today, $today);

Итак, у меня есть два вопроса;

1 - расширение $ - это технически строка, но она всегда состоит из чисел. Не лучше ли назвать это целым числом? Это может быть любая длина от 5 до 15 символов.

2 - Ссылаясь на это как на строку, может ли он потенциально открыть себя для каких-либо проблем безопасности?

Автор: Kimomaru Источник Размещён: 03.02.2017 04:40

Ответы (1)


1 плюс

27957 Репутация автора

Я удивлен, что это имеет большое значение. Хотя ваши тесты противоречат этой точке зрения, я думаю, что медленная часть запроса - это бит:

FROM_UNIXTIME(dateTimeOrigination) BETWEEN ? and ADDDATE(?, INTERVAL 1 DAY)

Я бы изменил это на

datetimeorigination BETWEEN UNIX_TIMESTAMP(?) AND UNIX_TIMESTAMP(? + INTERVAL 1 DAY)
Автор: Strawberry Размещён: 03.02.2017 06:30
Вопросы из категории :
32x32