Was Arne Drews sagt und -
EDIT: hab hier Mist über LIMIT geschrieben
nicht beachten - werd ich asap ändern.
SELECT ... WHERE ... LIMIT 1;
wird nur einen Datensatz ausgeben.
Der 2te Parameter nach dem Komma ist dass OFFSET.
SELECT ... WHERE ... LIMIT 1, 5;
Gib mir eine row und skippe die ersten 5.
SELECT ... WHERE ... ORDER BY `id` DESC LIMIT 1;
Gib mir eine row, sortiert bei id DESC. Bei Einträgen mit ids 1, 2, 3, 4 und 5 wird die 5te row ausgegeben.
SELECT ... WHERE ... ORDER BY `id` DESC LIMIT 1, 2;
Gib mir eine row, skipped die ersten 2, sortiert bei id DESC. Bei Einträgen mit ids 1, 2, 3, 4 und 5 wird die 4te row ausgegeben.
Platzhalter
Über bindParam() kannst Du angeben, als was die Value in die Query eingefügt werden soll.
Du könntest per bindParam() einen String ("5") übergeben - der wird dann aber als Integer eingefügt.
Ohne bindParam() - also die Parameter per execute übergeben - werden die Values default immer als String in die Query eingefügt.
Gibst Du also ein array('limit' => 5) als integer rein, wird trotzdem (default) ein String eingefügt.
Stell Dir die Query als Template vor (hier ganz gut beschrieben: http://php.net/manual/de/pdo.prepared-statements.php).
Du gibtst an, dass :hier eine Value eingefügt werden soll - im Bsp "Foo".
Per PHP übergibst Du die Value für :hier an execute().
Jetzt kommt PHP daher und ersetzt den Platzhalter :hier mit der Value "Foo".
Dabei Nimmt er den String
SELECT * FROM tbl WHERE col = :hier
und setzt an die Stelle :hier den String 'Foo' (inclusive der ' einfachen Anführungszeichen)
SELECT * FROM tbl WHERE col = 'Foo'
Per bindParam() können wir aber sagen: ich will, dass Du die Value als Integer einfügst.
Dann bekommt die Value keine Anführungszeichen, weil ... naja, Integer halt
.
Das einfügen der Values kann PHP (Treiber http://php.net/manual/de/pdo.drivers.php) oder auch der MySQL Server übernehmen (Siehe MySQL Prepared Statements.).
Bei PHP erledigt das der Treiber. Also wird intern die Query prepared und dann an den MySQL Server geschickt.
Man kann das, glaub ich mal gelesen zu haben, auch umstellen, dass man das den MySQL Server erledigen lässt.
Aber das ist sehr weit weg vom Thema 
Du kannst beides mixen - bindParam() und zusätzlich Parameter per execute() übergeben.
Wichtig ist bindParam() immer dann, wenn Du nur einen bestimmten Typ (String, Integer, ...) übergeben soltlest.
Und das ist der Knackpunkt bei LIMIT, denn das akzeptiert nur ganze Zahlen ohne Anführungszeichen.
SELECT ... FROM ... LIMIT '1', '5'; ist nicht valid.
Zu Deinem Script: ich glaub ich weiß jetzt, was Du willst.
Du willst die Links
<< Previous [1][2][3][4][5] Next >>
darstellen. Das aber dynamisch, damit sowas nicht passiert:
<< Previous [1][2][3][4][5][6][7][8][9][10][12][13][14][15]... Next >>
sondern:
<< Previous [5][6][7][8][9] Next >>
Das hab ich gerade mal versucht - bekomm ich gerade net hin 
Ist zu lange her.