Какой смысл разработчику PHP создать функцию bind_result, так как кажется, что get_result тоже работает.
if($stmt=$mysqli->prepare("SELECT member_ID FROM members where hair=? and hand=?")){ if($stmt->bind_param('ss',$hair,$hand)){ if($stmt->execute){ $result=$stmt->get_result(); while($line=$result->fetch_assoc()){ echo $line['member_ID']; } // ------------ versus ------------------- // $stmt->store_result(); // $stmt->bind_result($member_ID); // while($stmt->fetch()){ // echo $member_ID; // } } } }
Кажется, что (я предполагаю) разработчик php предпочитают $stmt->fetch()
поскольку эта функция вышла раньше, но почему $stmt->fetch()
? Похоже, что это не причина разницы имен переменных между $row['member_ID']
и $member_ID
.
Некоторым программистам нравится присваивать каждому элементу ассоциативного массива регулярную переменную, поэтому они могут использовать их менее подробно. Использование bind_result
делает это автоматически для вас, и вам не нужно повторять его каждый раз через цикл выборки.
Это просто стилистический выбор. IMHO, основная проблема с bind_result
заключается в том, что вы должны следить за тем, чтобы порядок аргументов синхронизировался с select
списком. Это также верно для bind_param
(именно поэтому PDO позволяет :name
параметры :name
, чтобы решить эту проблему), но преимущества перевешивают его.
Нет риска для безопасности при возврате строк из базы данных (с правильной проверкой в зависимости от того, что вы возвращаете),
get_result()
упрощает возврат предварительно созданного массива из инструкции,
bind_result()
упрощает работу со значениями, с которыми вы хотите работать.
По сути, все зависит от того, с чем разработчик предпочитает работать. Переменные или поиск массива. они выполняют одну и ту же задачу, просто используя bind_result удаляет строку кода для извлечения типа массива.