suche in mysql mit php

petschni

Mitglied
Hallo,

ich habe gerade angefangen mich mit php und mysql zu beschäftigen. Ich habe mir den Suchscript aus dem Tutorial genommen und versucht zum laufen zu bekommen. Meinen Datenbank heißt: peterschnitzler1 und meine Tabelle testtabelle .

Leider bekomme ich folgende Fehlermeldung:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/sites/site106/web/php/suche.php on line 33

Zeile 33 ist: $num_news = mysql_num_rows($result); // Zeile 33

Wäre dankbar, wenn mir jemand helfen könnte - ich nehme an der Fehler ist für jemanden der sich auskennt relativ trivial.

viele grüße
peter


PHP:
<?php  



include ("config.php");

mysql_pconnect ($db_server, $db_user, $db_passwort);

$eingabe = 'te';

  $query = 'select * from table testtabelle where '; //anfang der abfrage 
    for($i=0; $i<count($eingabe_array); $i++){ 
        $query .= "(news_text like '%".$eingabe_array[$i]."%' or ueberschrift like '%".$eingabe_array[$i]."%' or autor like '%".$eingabe_array[$i]."%')"; 
            //ob der $i-te begriff in einer der drei spalten enthalten ist (mit oder verknüpft) 
        if($i<count($eingabe_array)-1){ 
            $query .= ' and '; 
        } 
        //verknüpfung der einzelnen worte mit und 
    } 

 $result = mysql_db_query('peterschnitzler1',$query); //anfrage an die datenbank 
    $num_news = mysql_num_rows($result); // Zeile 33
    for($i=0; $i<$num_news; $i++){ 
        $news_id = mysql_result($result,$i,'news_id'); //abfrage der news_id von der datenbank 
        $ueberschrift = mysql_result($result,$i,'ueberschrift'); //abfrage der ueberschift 
        $news_text = mysql_result($result,$i,'news_text'); //abfrage der news 
        $first = array_slice(explode(' ', $news_text), 0, 40); //explode teilt den string wieder an der ' ' und array_slice erstellt einen neuen array mit den ersten 40 elementen = worten der news 
        $kurze_news = join(' ', $first) . '...&nbsp;'; //join verbindet die elemente des arrays wieder zu einem string. am ende werden noch drei punkte angehängt... 
        echo '<a href="show_news.php?news_id='.$news_id.'">'.$ueberschrift.'</a><br>'; //links auf die seite show_news.php 
        echo $kurze_news.'<br><br>'; //der 40 worte lange anfang des newstextes 
    } 


 
?>
 
Du musst irgendwo einen Schreibfehler in den Attributnamen z.B. haben...Also die Abfrage ist so nicht gut...Geh am Besten mal ins PHPMyAdmin (hast du das) und versuch mal die genau gleiche Abfrage statisch dort einzugeben? Also einfach eine Möglichkeit...Was sagt er dann
 
Original geschrieben von petschni
Hallo,

ich habe gerade angefangen mich mit php und mysql zu beschäftigen. Ich habe mir den Suchscript aus dem Tutorial genommen und versucht zum laufen zu bekommen. Meinen Datenbank heißt: peterschnitzler1 und meine Tabelle testtabelle .

Leider bekomme ich folgende Fehlermeldung:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/sites/site106/web/php/suche.php on line 33

Zeile 33 ist: $num_news = mysql_num_rows($result); // Zeile 33
Zunächst mal eine kleine Anmerkung zu der Funktion mysql_db_query: Diese Funktion ist seit PHP 4.0.6 veraltet. Verwenden Sie diese Funktion nicht. Stattdessen sollten Sie die Funktionen mysql_select_db() und mysql_query() verwenden.

Quelle: http://de3.php.net/mysql_db_query

Und dann zu Deinem Problem: Die Fehlermeldung sagt doch schon alles aus. Du übergibst der Funktion mysql_num_rows() das Recordset, das aber anscheinend fehlerhaft ist. Du kannst Dir jetzt mal direkt nach dem Du die Query an die Datenbank geschickt hast, den MySQL-Fehler anzeigen lassen:

PHP:
$rsData = mysql_query("SELECT colum FROM my_table") OR die("Fehler in der DB-Query: " . mysql_error());
Alternativ kannst Du dir den Query-String, den Du an die Datenbank schickst, im Browser ausgeben lassen, und mal sehen, was passiert, wenn Du ihn mit PHPMyAdmin (oder einem anderen Datenbank-Tool) ausführst.
 
Hallo,

vielen Dank für die Antworten.
Ich habe das in phpmyadmin probiert, aber dort bekomme ich nur folgende Ausgabe (ich habe das als sql Befehl ausgeführt)
PHP:
Datenbank peterschnitzler1 - Tabelle testtabelle auf mysql01.manitu.net 
Fehler

SQL-Befehl :  

$result = mysql_query(

'peterschnitzler1', $query
) 

MySQL meldet: 


#1064 - You have an error in your SQL syntax near '$result = mysql_query(  'peterschnitzler1', $query )' at line 1

Wenn ich die Zeile in den Script einfüge, dann bekomme ich folgende Ausgabe:
Fehler in der DB-Query: Unknown column 'colum' in 'field list'

Heißt das einfach nur, dass es in der Tabelle eine Zeile gibt, die er nicht kennt und wenn ja, wo muss ich das dann definieren?

viele grüße und danke
peter
 
Original geschrieben von petschni
Wenn ich die Zeile in den Script einfüge, dann bekomme ich folgende Ausgabe:
Fehler in der DB-Query: Unknown column 'colum' in 'field list'

Heißt das einfach nur, dass es in der Tabelle eine Zeile gibt, die er nicht kennt und wenn ja, wo muss ich das dann definieren?
Bitte poste doch mal die SQL-Anweisung, dann geht das Fehlerfinden auch einfacher ;)
 
folgende Anweisung habe ich dem Script hinzugefügt:

PHP:
$rsData = mysql_query("SELECT colum FROM testtabelle") OR die("Fehler in der DB-Query: " . mysql_error());
 
Mach mal das:

PHP:
$query = 'select * from table testtabelle where '; //anfang der abfrage 
    for($i=0; $i<count($eingabe_array); $i++){ 
        $query .= "(news_text like '%".$eingabe_array[$i]."%' or ueberschrift like '%".$eingabe_array[$i]."%' or autor like '%".$eingabe_array[$i]."%')"; 
            //ob der $i-te begriff in einer der drei spalten enthalten ist (mit oder verknüpft) 
        if($i<count($eingabe_array)-1){ 
            $query .= ' and '; 
        } 
        //verknüpfung der einzelnen worte mit und 
    } 


echo $query;

Also du generierst das Query und dann gibst du es aus...In deinem Browser sollte dann die generierte Abfrage stehen...Dann kopierst du die Abfrage und gibst sie mal im PHPMyAdmin ein und schreibst sie hier hin, ok?

Du kannst natürlich nicht mit Variablen arbeiten im PHPMyAdmin...
 
Folgende php Datei habe ich jetzt:
PHP:
<?php

include ("config.php");

mysql_pconnect ($db_server, $db_user, $db_passwort);

$eingabe = 'te';


 
	$query = 'select * from table testtabelle where '; //anfang der abfrage 
    for($i=0; $i<count($eingabe_array); $i++){ 
        $query .= "(news_text like '%".$eingabe_array[$i]."%' or ueberschrift like '%".$eingabe_array[$i]."%' or autor like '%".$eingabe_array[$i]."%')"; 
            //ob der $i-te begriff in einer der drei spalten enthalten ist (mit oder verknüpft) 
        if($i<count($eingabe_array)-1){ 
            $query .= ' and '; 
        } 
        //verknüpfung der einzelnen worte mit und 
    } 


echo $query;


 $result = mysql_query ('peterschnitzler1',$query); //anfrage an die datenbank 
    $num_news = mysql_num_rows($result); //anzahl der zurückgegebenen datensätze 
    for($i=0; $i<$num_news; $i++){ 
        $news_id = mysql_result($result,$i,'news_id'); //abfrage der news_id von der datenbank 
        $ueberschrift = mysql_result($result,$i,'ueberschrift'); //abfrage der ueberschift 
        $news_text = mysql_result($result,$i,'news_text'); //abfrage der news 
        $first = array_slice(explode(' ', $news_text), 0, 40); //explode teilt den string wieder an der ' ' und array_slice erstellt einen neuen array mit den ersten 40 elementen = worten der news 
        $kurze_news = join(' ', $first) . '...&nbsp;'; //join verbindet die elemente des arrays wieder zu einem string. am ende werden noch drei punkte angehängt... 
        echo '<a href="show_news.php?news_id='.$news_id.'">'.$ueberschrift.'</a><br>'; //links auf die seite show_news.php 
        echo $kurze_news.'<br><br>'; //der 40 worte lange anfang des newstextes 
    } 


 
?>

Als Ausgabe bekomme ich:
select * from table testtabelle where
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /home/sites/site106/web/php/suche2.php on line 38

Warning: mysql_num_rows(): supplied argument

Wenn ich das in phpmyadmin eingebe, bekomme ich:


PHP:
Datenbank peterschnitzler1 - Tabelle testtabelle auf mysql01.manitu.net 
Fehler

SQL-Befehl :  

SELECT * 
FROM TABLE testtabelle
WHERE LIMIT 0 , 30 

MySQL meldet: 


#1064 - You have an error in your SQL syntax near 'TABLE testtabelle
WHERE  LIMIT 0, 30' at line 2
 
OK, ist doch eine perfekte Problembeschreibung meinst du nicht? ;)

Du hast ein WHERE im Query aber keine Bedingungen, mach es doch so:

PHP:
$firsttime = true;
$query = 'select * from table testtabelle'; //anfang der abfrage 
    for($i=0; $i<count($eingabe_array); $i++){ 
       if ($firsttime == true) {
          $query .= ' where ';
          $firsttime = false;
       } 
       $query .= "(news_text like '%".$eingabe_array[$i]."%' or ueberschrift like '%".$eingabe_array[$i]."%' or autor like '%".$eingabe_array[$i]."%')"; 
            //ob der $i-te begriff in einer der drei spalten enthalten ist (mit oder verknüpft) 
        if($i<count($eingabe_array)-1){ 
            $query .= ' and '; 
        } 
        //verknüpfung der einzelnen worte mit und 
    }
 
Vielen Dank für die Antwort.

Ich habe den Block jetzt ersetzt, aber ich bekomme leider immer noch folgende Fehlermeldung:


Das sind die Zeilen:
PHP:
$result = mysql_query ('peterschnitzler1',$query); //anfrage an die datenbank 
    $num_news = mysql_num_rows($result); //anzahl der zurückgegebenen datensätze

PS: Ich habe auch noch einmal den "echo-Befehle" eingebaut und bekomme immer noch die Ausgabe: select * from table testtabelle
 
Zurück