Avatar billede coolcom Nybegynder
23. februar 2008 - 18:41 Der er 9 kommentarer og
1 løsning

Fejl i MySQL forespørgsel

Hey.

Jeg har følgende forespørgsel:

$totalrow = $connector->query("SELECT count " .$field_to_count. " as total from " .$table_to_use. "") or die(mysql_error());

Den returnere dog følgende besked:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Hvad skyldes dette?
Avatar billede riversen Nybegynder
23. februar 2008 - 18:53 #1
lad være med at afslutte din sql med .""
Avatar billede riversen Nybegynder
23. februar 2008 - 18:55 #2
hov, der er mere...
prøv:
$totalrow = $connector->query("SELECT count( " .$field_to_count. ") as total from " .$table_to_use. " ORDER BY total") or die(mysql_error());
Avatar billede coolcom Nybegynder
23. februar 2008 - 19:11 #3
Så får jeg denne besked:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') as total from ORDER BY total' at line 1
Avatar billede erikjacobsen Ekspert
23. februar 2008 - 19:28 #4
Hvad står der i $field_to_count og i $table_to_use ?
Avatar billede coolcom Nybegynder
23. februar 2008 - 19:48 #5
class Pager{


    var $pr_side = 10;
    var $startside = 1;
    var $next = "Næste >>";
    var $prev = "<< Forrige";
    var $vis_sider = 1;
    var $total;
    var $pagerpath = "?";
   

// functionen benyttes til at bestemme
// hvormange der skal vises på hver side
function pr_side($pr_side){
    $this -> pr_side = $pr_side;
}

// $pagerpath = Benyttes til at angive hvilken fil pageren skal fungere i
// $q_or_amp = benytes til at bestemme om der skal være et '?' eller '&amp;'/'&' efter linket
function pagerpath($pagerpath,$q_or_amp){
    $this -> pagerpath = $pagerpath.$q_or_amp;
}

// Du kan definere knapperne anderledes hvis du vil ;o)
function buttons($prev, $next){
    $this -> prev = $prev;
    $this -> next = $next;

}

// benyttes direkte i din sql-query f.eks. $limit = $p -> limit();
// $query = mysql_query("select * from tabel limit ".$limit."");
function limit(){

    if (!isset($_GET['s'])) {
        $_GET['s'] = 0; //Tjekker om $s - som står for start - er sat, hvis ikke sættes den
    }

    $limit = $_GET['s'].",".$this -> pr_side;
    return $limit;
}


function Pager($field_to_count = "", $table_to_use = ""){
global $connector;

    $pagerecho .= "";

    //$totalrow = $connector->query("SELECT COUNT(".$field_to_count.") AS TOTAL FROM " .$table_to_use. "") or die(mysql_error());
    $totalrow = $connector->query("SELECT COUNT(*) FROM "$table_to_use"") or die(mysql_error());
    $this->total = mysql_result($totalrow,0);
       
    $pagerecho .= '<table border="0" cellpadding="2" cellspacing="2" align="center"><tr>';
   
    // Find ud af om derskal være et Forrige link
    //Tjekker om værdien af $s er større eller lig $pr_side
    if ($_GET['s'] >= $this -> pr_side) {
        //Regner ud hvor mysql skal starte hvis forrige side kaldes
        $prev_link = $_GET['s']-$this -> pr_side;
        //Udskriver linket 
            $pagerecho .= '<td><a href="'.$this -> pagerpath.'s='.$prev_link.'">'.$this -> prev.'</a></td>';
    }

    //Hvis vis_sider er sat til 1 vises antal sider med links så man kan springe i siderne
    if($this -> vis_sider == 1){
    // Find ud af hvis/hvor mange sider der er rows til
    $pagerecho .= '<td>';
    $page = $this -> startside; //Definerer hvor sidetal skal starte

    //For-løkke der kører indtil der ikke er nok rows til en side mere
    for($start=0; $this -> total > $start; $start=$start+$this -> pr_side){
        //Tjekker om linket vil komme til at pege på den side man er på
        if ($start != $_GET['s']) {
            //...hvis ikke, udskrives link med værdien af $page 
                $pagerecho .= '&nbsp;<a href="'.$this -> pagerpath.'s='.$start.'">'.$page.'</a>&nbsp;'; //60
        } else {
            //Ellers, dvs. hvis linket vil pege på den side man er på..
            //...udskrives værdien af $page bare, altså ikke som link
            $pagerecho .= '&nbsp;['.$page.']&nbsp;'; 
            }
            $page++; //Lægger en til $page til næste gang løkken køres
        }
    $pagerecho .= '</td>';
    }
       

    // Find ud af om der skal være et næste link
    // Tjekker om der er flere sider
        $ps = $this -> pr_side;
    if ($this->total > $_GET['s']+$ps) {
        //Regner ud hvor mysql skal starte hvis næste side kaldes 
        $next_link = $_GET['s']+$this -> pr_side;
        $pagerecho .= '<td><a href="'.$this -> pagerpath.'s='.$next_link.'">'.$this -> next.'</a></td>'; //Udskriver linket "næste"
    }
   
    $pagerecho .= "</tr></table>";

    return $pagerecho;

}//end funktion Pager()


}//end class




Dette er min class, som jeg bruger således:

        include "includes/class_pager.php";
       
        $p = new Pager;
       
        $p -> pr_side($settings['news_limit']);

        $limit = $p -> limit();
       
          $result = $connector->query("SELECT * FROM felderbal_news LIMIT ".$limit."");
          while($row = $connector->fetchArray($result)){
           
            $this->output = $this->html->shownews($row);
           
          }
       
        $pager = $p -> Pager("id","felderbal_news");
        echo $pager;
Avatar billede dkfire Nybegynder
23. februar 2008 - 20:38 #6
Hvorfor er det du viser en kode som ikke virker med de rettelser som er foreslået:

//$totalrow = $connector->query("SELECT COUNT(".$field_to_count.") AS TOTAL FROM " .$table_to_use. "") or die(mysql_error());
    $totalrow = $connector->query("SELECT COUNT(*) FROM "$table_to_use"") or die(mysql_error());

Ret det til:

$totalrow = $connector->query("SELECT COUNT(".$field_to_count.") AS TOTAL FROM " .$table_to_use) or die(mysql_error());
//$totalrow = $connector->query("SELECT COUNT(*) FROM ".$table_to_use) or die(mysql_error());
Avatar billede coolcom Nybegynder
23. februar 2008 - 20:59 #7
Det virker heller ikke. Nufår jeg fejlen:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') AS TOTAL FROM' at line 1
Avatar billede dkfire Nybegynder
23. februar 2008 - 22:02 #8
Jeg ved ikke hvor meget du ved om OOP og Klasser, men når du laver et nyt objekt af en klasse, så køres klassens konstrutør funktion. Den har enten det samme navn som klassen selv eller også har den navnet __construct().

Dvs når du laver:
$p = new Pager;

Udover du lavet et nyt objekt af klassen Pager, så kalder du også funktionen Pager i klassen, hvis den findes. Dvs den funktion du har lavet bliver kaldt uden nogen parametre og derfor er $field_to_count og $table_to_use tomme.
Enten så omdøber du din funktion til et andet navn, eller også kalder du din klasse med parametre:
$p = new Pager("id","felderbal_news");

Jeg skal dog ikke kunne sige hvad der sker når du har en return i din funktion.
Avatar billede coolcom Nybegynder
24. februar 2008 - 01:08 #9
@dkfire:

Tak. Så fik jeg det til at virke

SMid et svar for point
Avatar billede dkfire Nybegynder
24. februar 2008 - 15:03 #10
Det var godt. :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester