#php #mysql #html
#php #mysql #HTML
Вопрос:
Я знаю только, что эта часть кода не подходит для производительности веб-приложения, потому что она потратила много времени на выполнение двух SQL-запросов вместо одного. Я хочу прочитать ваши предложения по этой части кода. Кроме того, я хочу прочитать ваше кодовое решение этого. Код работает нормально.
Я ценю вашу помощь.
Заранее благодарю вас
<html>
<body>
<select name="category">
<option value="category">category name</option>
<?php
$sql = "SELECT category.name as cat, article.name as art from category
JOIN article ON category.id = article.id";
$query = mysqli_query($conn, $sql);
while($row = mysqli_fetch_array($query)){
echo "
<option value='".$row["cat"]."'>".$row["cat"]."</option>";
}
mysqli_close($conn);
?>
</select>
<select name="article">
<option value="articlename">article name</option>
<?php
$sql = "SELECT category.name as cat, article.name as art from category
JOIN article ON category.id = article.id";
$query = mysqli_query($conn, $sql);
while($row = mysqli_fetch_array($query)){
echo "
<option value='".$row["art"]."'>".$row["art"]."</option>";
}
mysqli_close($conn);
?>
</select>
</body>
</html>
Комментарии:
1. Код с хорошим отступом приятнее читать
2. Примечание: объектно-ориентированный интерфейс to
mysqli
значительно менее подробный, что упрощает чтение и аудит кода, и его нелегко спутать с устаревшимmysql_query
интерфейсом, где отсутствие одногоi
может вызвать проблемы. Пример:$db = new mysqli(…)
и$db->prepare("…")
процедурный интерфейс в значительной степени является артефактом эпохи PHP 4, когдаmysqli
был представлен API, и его не следует использовать в новом коде.
Ответ №1:
Вам не нужно устанавливать 2 подключения к БД для получения одних и тех же данных. Вы могли бы создать коллекцию объектов и использовать их на месте, например…
<?php
$arr = [];
$sql = "SELECT category.name as cat, article.name as art from category
JOIN article ON category.id = article.id";
$query = mysqli_query($conn, $sql);
while($row = mysqli_fetch_array($query)){
$obj = (object) [
"cat" => $row["cat"],
"art" => $row["art"]
];
array_push($arr, $obj);
}
mysqli_close($conn);
?>
<select name="category">
<option value="category">category name</option>
foreach($arr as $obj) {
?>
<option value='"<?php echo $obj->cat; ?>"'><?php echo $obj->cat; ?></option>
<?php
}
<select name="article">
<option value="articlename">article name</option>
foreach($arr as $obj) {
?>
<option value='"<?php echo $obj->art; ?>"'><?php echo $obj->art; ?></option>
<?php
}
Ответ №2:
Вы можете подготовить строки, которые будут содержать цикл <option>
in 1, а затем просто повторить их.
В примере :
<?php
$sql = "SELECT category.name as cat,
article.name as art
FROM category
JOIN article
ON category.id = article.id";
$query = mysqli_query($conn, $sql);
$articles = "";
$categories = "";
while($row = mysqli_fetch_array($query)) {
$categories .= "<option value='" . $row["cat"] . "'>" . $row["cat"] . "</option>";
$articles .= "<option value='" . $row["art"] . "'>" . $row["art"] . "</option>";
}
mysqli_close($conn);
?>
<select name="category">
<option value="category">category name</option>
<?php echo $categories; ?>
</select>
<select name="article">
<option value="articlename">article name</option>
<?php echo $articles; ?>
</select>