[php] Probleem met "searchengine"

Pagina: 1
Acties:

  • spok9
  • Registratie: November 2000
  • Laatst online: 14-09 12:30

spok9

Groen...

Topicstarter
Ik ben op het moment bezig met het leren van het gebruik van sql databases in php. [url="Ihttp://www.zend.com/zend/spotlight/websearchengine2may.php#Heading9"]Hier[/url] vond ik een tutorial over het maken van een eenvoudige searchengine die door keywords in een database zoekt. Veel errors heb ik er al uitgevist, maar nu loop ik ff vast bij de volgende:
code:
1
2
Couldn't execute query [1064]: You have an error in your SQL syntax near
'[(test)(test2)]) GROUP BY keyword_list.page_id ORDER BY score DESC' at line 7

dit is het script:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?
$dbinfo = array("host" => "localhost",
    "user" => "root",
    "pass" => "ietsanders",
    "database" => "mydb",
    "keywords" => "keywords_list",
    "desc" => "page_data");
 
function search($db, $query_terms) {

    $matches = array();

    $db_h = mysql_connect($db['host'], $db['user'], $db['pass']);

    if (!$db_h)
    { $error = "Couldn't connect to MySQL database [" . mysql_errno() . "]: ";
    $error .= mysql_error();

    return $error;
    }


    mysql_select_db("jokes");


    $keywords = explode(' ', addslashes(strtolower($query_terms)));
    $reg_ex = "[(" . implode(")(", $keywords) . ")]";


    $query = "SELECT count(keyword_list.key_id) as score,
    page_data.url as url,
    page_data.title as title,
    page_data.description as description
    FROM keyword_list, page_data
    WHERE (page_data.page_id = keyword_list.page_id)
    AND (keyword_list.sleutel REGEXP $reg_ex)
    GROUP BY keyword_list.page_id
    ORDER BY score DESC";


    $query_h = mysql_query($query, $db_h);


    if (!$query_h)
    { $error = "Couldn't execute query [" . mysql_errno($db_h) . "]: ";
    $error .= mysql_error($db_h);

    return $error;
    }
 

    while($row = mysql_fetch_array($query_h))
    { array_push($matches, $row);
    }


    echo $matches;


}


$val = search($dbinfo, "test test2");
if(is_string($val)) die ($val);


// print the contents of the $val array
?>

Naar mijn idee is dit gewoon goed, de syntax klopt en de variabele $reg_ex wordt precies zo opgebouwd als in de tutorial, hoewel ik toch denk dat hier de fout zit. heeft iemand enig idee wat hier de fout kan zijn?

[sorry, om de een of andere reden worden extra line-breaks niet weergegeven, wordt de code niet duidelijker op]

Zolang ik het zelf geloof is het goed toch?


  • Erik Jan
  • Registratie: Juni 1999
  • Niet online

Erik Jan

Langzaam en zeker

Hmm, volgens mij moet een MySQL regexp altijd tussen aanhalingstekens, dus vervang dit deel van je query
code:
1
AND (keyword_list.sleutel REGEXP $reg_ex)

met dit
code:
1
AND (keyword_list.sleutel REGEXP \"$reg_ex\")

Verder een is dit wel een quick & dirty zoekmanier, maar wel leuk om van te leren. Suc6!

EJ

This can no longer be ignored.


  • spok9
  • Registratie: November 2000
  • Laatst online: 14-09 12:30

spok9

Groen...

Topicstarter
Ik heb het aangepast, nu is de error weg, maar geeft ie als enige output de text "Array", wat gaat er nu fout?

BTW: wat is dan een betere manier om een zoekfunctie te maken?

Zolang ik het zelf geloof is het goed toch?


  • tomato
  • Registratie: November 1999
  • Niet online
Op dinsdag 30 oktober 2001 21:56 schreef spok9 het volgende:
Ik heb het aangepast, nu is de error weg, maar geeft ie als enige output de text "Array", wat gaat er nu fout?
Doe eens print_r($array_naam) op die array, dan zie je wat erin zit.

  • spok9
  • Registratie: November 2000
  • Laatst online: 14-09 12:30

spok9

Groen...

Topicstarter
Op dinsdag 30 oktober 2001 22:05 schreef tomato het volgende:

[..]

Doe eens print_r($array_naam) op die array, dan zie je wat erin zit.
$val, $matches, $row, $query_h en $reg_ex geven allen als output helemaal niks... :?

Zolang ik het zelf geloof is het goed toch?


  • tomato
  • Registratie: November 1999
  • Niet online
Op dinsdag 30 oktober 2001 22:35 schreef spok9 het volgende:

[..]

$val, $matches, $row, $query_h en $reg_ex geven allen als output helemaal niks... :?
Waar haalde je de output 'Array' dan vandaan :?

  • Erik Jan
  • Registratie: Juni 1999
  • Niet online

Erik Jan

Langzaam en zeker

Als print_r($matches); (plaats helemaal onderaan die functie) geen output geeft, kan het zijn dat je table leeg is? M.a.w. geef een zoekstring op die zeker weten resultaten teruggeeft?
Waar haalde je de output 'Array' dan vandaan?
Eerst regel van de functie search(), "$matches = array();" ;)

This can no longer be ignored.


  • spok9
  • Registratie: November 2000
  • Laatst online: 14-09 12:30

spok9

Groen...

Topicstarter
Op dinsdag 30 oktober 2001 22:41 schreef Erik Jan het volgende:
Als print_r($matches); (plaats helemaal onderaan die functie) geen output geeft, kan het zijn dat je table leeg is? M.a.w. geef een zoekstring op die zeker weten resultaten teruggeeft?
De zoekstring test moet wel degelijk resultaat leveren, ik heb hiervoor de waardes in de tabel gezet, dus dat is het probleem niet (zal het voor de zekerheid morgen nog even checken). Zou er evt. ook een ander probleem kunnen zijn?

Zolang ik het zelf geloof is het goed toch?


  • spok9
  • Registratie: November 2000
  • Laatst online: 14-09 12:30

spok9

Groen...

Topicstarter
Iemand?

Zolang ik het zelf geloof is het goed toch?


  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 07-07 11:51
Op dinsdag 30 oktober 2001 21:56 schreef spok9 het volgende:
[...]
wat is dan een betere manier om een zoekfunctie te maken?
Kijk eens naar dit topic waar ik beschreef hoe je een 'simpele' zoekmachine opzet die ook bij grotere databases een goeie performance heeft.

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


  • spok9
  • Registratie: November 2000
  • Laatst online: 14-09 12:30

spok9

Groen...

Topicstarter
Op donderdag 01 november 2001 12:19 schreef bigtree het volgende:

[..]

Kijk eens naar dit topic waar ik beschreef hoe je een 'simpele' zoekmachine opzet die ook bij grotere databases een goeie performance heeft.
Ben al onderweg, thx!

Zolang ik het zelf geloof is het goed toch?

Pagina: 1