2010-04-06 14 views
1

Voici le code que j'utilise pour chercher dans ma table. J'ai fait les colonnes pertinentes FULLTEXT dans le tableau. Cela ne me rapporte rien. Quelqu'un peut-il me dire ce que je fais mal? Merci d'avance.Recherche avec MATCH(), AGAINST() et AS score avec mysqli et php

$sql = 'SELECT id, person_name, classroom, school, MATCH (person_name, classroom, school) AGAINST (?) AS score FROM images WHERE MATCH(person_name, classroom, school) AGAINST(?) ORDER BY score DESC'; 

$stmt = $db_connection->prepare($sql); 

$stmt->bind_param('ss',$keyword,$keyword); 

$stmt->execute(); 

$stmt->store_result(); 
$stmt->bind_result($id,$uname,$class,$school); 

$xml = "<data>".PHP_EOL; 

while($stmt->fetch()){ 

    $xml .= " <person>".PHP_EOL; 
    $xml .= "  <id>$id</id>".PHP_EOL; 
    $xml .= "  <name>$uname</name>".PHP_EOL; 
    $xml .= "  <class>$class</class>".PHP_EOL; 
    $xml .= "  <school>$school</school>".PHP_EOL; 
    $xml .= " </person>".PHP_EOL; 

} 

$xml .= "</data>"; 

echo $xml; 

est Ci-dessous une image des index de la table: alt text http://clients.bionic-comms.co.uk/drew/Picture1.png

Il semblerait que le problème est d'essayer de lier les paramètres avant d'exécuter la requête. Quelqu'un peut-il confirmer que vous pouvez utiliser cette requête avec des instructions préparées?

+0

Stupide questions d'abord: La table utilise-t-elle réellement le moteur MyISAM? Parce que le fulltext n'est supporté que là ... –

+0

en effet. Si je peux trouver comment télécharger une image, je peux vous montrer à quoi ressemblent les index. – Drew

Répondre

0

En passant, il semblerait que votre SQL a une erreur de syntaxe: DES à la fin devrait être DESC. Vous n'avez aucune vérification d'erreur sur les appels de préparation/d'exécution, donc il n'y a aucun moyen de savoir si l'une ou l'autre crache une erreur.

S'il ne s'agit que d'une faute de frappe entrant ici et que la vraie requête est correcte, que se passe-t-il lorsque vous l'exécutez manuellement dans phpmyadmin? Des résultats là-bas?

+0

merci. J'ai coupé la requête à 'SELECT * FROM images WHERE MATCH (' person_name', 'classroom') CONTRE ('gil')' et aussi longtemps que je fais correspondre le cas, je reçois un retour. – Drew

+0

Il y a aussi l'incompatibilité des paramètres 'in boolean mode' dans les deux appels MATCH(). Le 'où' est booléen, mais la sélection du champ ne l'est pas. –