У меня есть два файла для моего сайта: search_team.php и returnPossibleTeams.php. search_team — это в основном HTML-страница, которая позволяет пользователю вводить название команды. Всякий раз, когда onKeyUp
срабатывает, вызывается функция JavaScript, которая выполняет GET-запрос к returnPossibleTeams.php с AJAX. returnPossibleTeams.php должен выполнить запрос к базе данных, а затем вернуть все возможные результаты.
search_team.php
<script type="text/javascript">
function showTeams(str) {
if (str.length == 0) {
document.getElementById("teamResults").innerHTML = "<br /><hr />Start typing the name of a team to search<br /><hr />";
return;
} else {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("teamResults").innerHTML = this.responseText;
}
};
xmlhttp.open("GET", "functions/returnPossibleTeams.php?q=" + str, true);
xmlhttp.send();
}
}
</script>
<div id="main">
<br /><br />
<!-- Search for a team with it's name or ID -->
<div class="title">
Search for a Team
</div>
<div style="text-align:center;">
<br />Enter the target team's name their TFConnections team page.<br /><br />
From there, you can request an invite, view all of their rankings and members, and even
<i>challenge</i> them (if you're in a team of your own).<br />You can also view information
about possible upcoming events and other details they've set up!<br /><br />
<input placeholder="Team Name" onkeyup="showTeams(this.value);" type="text" name="searchterms">
<div id="teamResults">
<hr />Start typing the name of a team to search<br /><hr />
</div>
<br />
</div>
</div>
Следует отметить, что эта страница включает header.php, который создает соединение с базой данных MySQL PDO и хранит его в $db
,
returnPossibleTeams.php
<?php
if (isset($_GET['q'])) {
try {
$statement = $db->prepare("SELECT * FROM `teams` WHERE `Team Name` LIKE %:teamname%");
$result = $statement->execute(array('teamname' => $_GET['q']));
} catch (Exception $e) {
echo "An error has occured.";
}
echo $statement->fetch(PDO::FETCH_ASSOC)['Team Name'];
}
?>
У меня проблема в том, что returnPossibleTeams.php не может получить доступ к $db
дескриптор базы данных, как это было установлено в файле, включенном в начале search_team.php. Самый простой способ обойти эту проблему отсутствующего ресурса — создать новое соединение с базой данных в начале returnPossibleTeams.php, но это будет крайне неэффективно, так как это будет создавать новое соединение с базой данных каждый раз, когда пользователь нажимает клавишу! Как лучше обойти эту проблему?
Вы можете поставить его в состояние.
if(!isset($db)) {
//Here you have two choices either just connect to the database or require the fb connection file. Either way you need to connect to the database.
}
Таким образом, если он уже установлен, он не будет создавать новое соединение.
РЕДАКТИРОВАТЬ: Тем не менее я думаю, что PHP будет устанавливать новое соединение при каждом вызове в любом случае, потому что это, как работает PHP. Когда скрипт завершает работу и возвращает ваши данные, он завершается, что завершает соединение с базой данных.
Других решений пока нет …