J'ai une connexion de base de données plus tôt dans le script.
$db = JFactory::getDbo();
Voici le code de requête:
$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();
Je m'attends à ce que $dbalbumartist
Contienne le contenu du champ 'artist_name'
Pertinent, mais lorsque j'échoise $dbalbumartist
, Il affiche la valeur de la colonne artist_id
.
Quelqu'un peut-il conseiller où je me suis trompé et comment y remédier?
Pour la plupart, votre code est plutôt correct. Comme commenté, vous utilisez ->lookup()
- une méthode inconnue à l’heure actuelle.
En règle générale, vous utiliseriez uniquement l'opérateur LIKE
si vous utilisiez également les symboles génériques _
Ou %
. Parce que votre condition LIKE
correspond à la chaîne entière $releaseartistid
, Il semble plus logique de remplacer LIKE
par =
.
La méthode loadResult () doit être utilisée lorsque vous attendez une seule valeur dans le jeu de résultats. Votre requête renvoie deux colonnes de données. Par conséquent, si vous attendez une seule ligne de données, vous préférerez peut-être loadRow()
, loadAssoc()
ou loadObject()
. Si votre jeu de résultats peut contenir plusieurs lignes de données, reportez-vous à la section Méthodes à plusieurs lignes et déterminez la méthode la mieux adaptée à votre projet.
En supposant que votre valeur $releaseartistid
Soit un entier, vous pouvez éviter de mettre la valeur entre guillemets et maintenir la sécurité en convertissant la valeur sous la forme (int)
.
Par préférence personnelle, j'utilise qn()
contre quoteName()
uniquement pour la brièveté du code.
Code suggéré:
$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
}
Enfin, si vous voulez utiliser LIKE
avec des caractères génériques, je vous renverrai à ce message où j'explique comment utiliser LIKE
avec la syntaxe d'échappement correcte de Joomla pour maintenir la sécurité des requêtes .