スクリプトの前半にデータベース接続があります。
$db = JFactory::getDbo();
クエリコードは次のとおりです。
$albumartistidquery = $db->getQuery(true);
$albumartistidquery->select($db->quoteName(array('artist_id', 'artist_name')));
$albumartistidquery->from($db->quoteName('#__vinylvault_artists'));
$albumartistidquery->lookup($db->quoteName('artist_name'));
$albumartistidquery->where($db->quoteName('artist_id') . ' LIKE '. $db->quote($releaseartistid));
$db->setQuery($albumartistidquery);
// Load the results
$dbalbumartist = $db->loadResult();
$dbalbumartist
には関連する'artist_name'
フィールドの内容が含まれているはずですが、$dbalbumartist
をエコーすると、artist_id
列の値が表示されます。
誰かが私がどこが間違っているのか、そしてどのように修正するのかアドバイスできますか?
ほとんどの場合、コードはかなり正しいです。コメントされているように、あなたは->lookup()
-現在前例のないメソッドを使用しています。
通常、LIKE
演算子は、__
_または_%
_ワイルドカード記号も使用する場合にのみ使用します。 LIKE
条件が_$releaseartistid
_文字列全体と一致しているため、LIKE
を_=
_で置き換える方がより論理的に思われます。
loadResult() メソッドは、結果セットに単一の値のみが必要な場合に使用します。クエリは2列のデータを返すため、1行のデータが必要な場合は、loadRow()
、loadAssoc()
、またはloadObject()
を使用できます。結果セットに複数のデータ行が含まれている可能性がある場合は、 Mult-Row Methods を参照し、プロジェクトに最適な方法を決定します。
_$releaseartistid
_値が整数であると想定すると、値を_(int)
_としてキャストすることにより、値を引用符で囲むことを避け、セキュリティを維持できます。
個人的な好みの問題として、私は純粋にコードを簡潔にするためにqn()
とquoteName()
を使用しています。
推奨されるコード:
_$db = JFactory::getDBO();
try {
$albumartistidquery = $db->getQuery(true)
->select($db->qn(array('artist_id', 'artist_name')))
->from($db->qn('#__vinylvault_artists'))
->where($db->qn('artist_id') . ' = ' . (int)$releaseartistid);
echo $albumartistidquery->dump(); // never expose this on your live/public site
$db->setQuery($albumartistidquery);
echo "<pre>";
var_export($db->loadAssoc()); // display the resultset
echo "</pre>";
} catch (Exception $e) {
echo "<div>", $e->getMessage(), "</div>"; // never expose this on your live/public site
}
_
最後に、ワイルドカードでLIKE
を使用したい場合は、この投稿を参照して説明します クエリのセキュリティを維持するために、適切なJoomlaエスケープ構文でLIKE
を使用する方法 。