私のデータベースには次の3つのテーブルがあります。特定のタグを持つすべての画像を取得するには、あまりにも多くのMySQLクエリを使用していますか?
Table: Images
Columns: Image_ID, Title, Description, Author, Date, Path, Rating
Table: Tags
Columns: Tag_ID, Title
Table: TagsConnection
Columns: Image_ID, Tag_ID
特定のタグに対応するすべての画像を取得するために、このコードを実行します。
<?php
$tagName = $_SERVER['QUERY_STRING'];
$realTagName = substr($tagName, 1);
$realestTagName = str_replace('%20', ' ', $realTagName);
$sql = "SELECT * FROM tags WHERE tag='$realestTagName'";
$result = mysqli_query($conn, $sql);
$getResult = mysqli_fetch_assoc($result);
$tagId = $getResult['id'];
$sql2 = "SELECT * FROM tagsconnection WHERE tagid='$tagId'";
$result2 = mysqli_query($conn, $sql2);
while ($row = mysqli_fetch_assoc($result2)) {
$imageId = $row['imageid'];
$sql3 = "SELECT * FROM image WHERE id='$imageId'";
$result3 = mysqli_query($conn, $sql3);
$getResult3 = mysqli_fetch_assoc($result3);
echo '<div class="imageContainer">
<h1>'.$getResult3['name'].'</h1>
<a href="imageInfo.php?='.$getResult3["path"].'">
<img class="uploadedImg" src="uploads/'.$getResult3["path"] .'" alt="Random image" />
</a>
</div>';
}
?>
私はそれにそれが行われるべき方法をやっていないよ、この悪い感じを持っているので、私はここの周りに尋ねると、可能であればいくつかのヒントやポインタを取得することを決めました。
あなたのコードは[** SQLインジェクションの脆弱性であります**](https://en.wikipedia.org/wiki/SQL_injection)の攻撃。あなたは[** mysqli **](https://secure.php.net/manual/en/mysqli.prepare.php)または[** PDO **](https ://secure.php.net/manual/en/pdo.prepared-statements.php)ドライバ。 [**この投稿**](https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)には良い例があります –
[Joins ](https://stackoverflow.com/documentation/sql/261/join#t=201707141726181817712)。 – cteski
経験則として、クエリインループは、ほとんどの場合、ループの前にある「結合」に抽出できます。 – colburton