views:

139

answers:

1

Below is the code I am using to search my table. I have made the relevant columns FULLTEXT in the table. This doesn't return me anything. Can someone tell me what it is that i'm doing wrong? Thanks in advance.

$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;

Below is an image of the indexes of the table: alt text

It would appear that the problem lies in trying to bind the parameters before executing the query. Can someone confirm that you can use this query with prepared statements?

A: 

Offhand, it would look like your SQL's got a syntax error: DES at the end should be DESC. You have no error checking on the prepare/execute calls, so there's no way to tell if either spit out an error.

If that's just a typo entering it here and the real query's fine, what happens when you run it manually in phpmyadmin? Any results there?

Marc B
thanks. i have cut down the query to `SELECT * FROM images WHERE MATCH(`person_name`, `classroom`) AGAINST ('gil')` and as long as i match the case i get a return.
Drew
There's also the mismatch of the 'in boolean mode' parameters in the two MATCH() calls. The 'where' is boolean, but the field selection isn't.
Marc B