webForumDet fria alternativet

Limit i Prepared statement

4 svar · 437 visningar · startad av alioooop

alioooopMedlem sedan feb. 2008120 inlägg
#1

hej

försöker använda mig utav en dynamisk LIMIT i mysql så jag skriver så här:

$sql = "SELECT * FROM Users WHERE Uname LIKE CONCAT('%', ? ,'%') AND Active = 1 ORDER BY Uname LIMIT ?";
						$q = $conn->prepare($sql);
						$q->execute(array($searchword, $count));

men ag får inte fram något, och har genom att sätta in en vanlig siffra istället för "?" insett att det är limit som failar!

hur löser jag detta?

MVH Ali

nitro2k01Medlem sedan aug. 20037 630 inlägg
#2

Gissning: Du måste binda parametrarna med explicita typer. Gissningsvis skickas $count vidare som t ex '5' om du inte gör det, vilket resulterar i LIMIT '5' vilket inte är så lyckat.

                        $sql = "SELECT * FROM Users WHERE Uname LIKE CONCAT('%', ? ,'%') AND Active = 1 ORDER BY Uname LIMIT ?"; 
                        $q = $conn->prepare($sql); 
                        $q->bind_param('s', $sw)
                        $q->bind_param('i', $ct)
                        $sw = $searchword;
                        $ct = $count;
                        $q->execute();
alioooopMedlem sedan feb. 2008120 inlägg
#3

nitro2k01 skrev:

Gissning: Du måste binda parametrarna med explicita typer. Gissningsvis skickas $count vidare som t ex '5' om du inte gör det, vilket resulterar i LIMIT '5' vilket inte är så lyckat.

                        $sql = "SELECT * FROM Users WHERE Uname LIKE CONCAT('%', ? ,'%') AND Active = 1 ORDER BY Uname LIMIT ?"; 
                        $q = $conn->prepare($sql); 
                        $q->bind_param('s', $sw)
                        $q->bind_param('i', $ct)
                        $sw = $searchword;
                        $ct = $count;
                        $q->execute();

din metod funkade inte, det står:

Fatal error: Call to undefined method PDOStatement::bind_param()

nitro2k01Medlem sedan aug. 20037 630 inlägg
#4

Ah, du kör PDO, då är syntaxen lite annorlunda. Prova:

                        $sql = "SELECT * FROM Users WHERE Uname LIKE CONCAT('%', ? ,'%') AND Active = 1 ORDER BY Uname LIMIT ?";  
                        $q = $conn->prepare($sql);  
                        $q->bindParam(1, $searchword, PDO::PARAM_STR);
                        $q->bindParam(2, $count, PDO::PARAM_INT);
                        $q->execute();
alioooopMedlem sedan feb. 2008120 inlägg
#5

nitro2k01 skrev:

Ah, du kör PDO, då är syntaxen lite annorlunda. Prova:

                        $sql = "SELECT * FROM Users WHERE Uname LIKE CONCAT('%', ? ,'%') AND Active = 1 ORDER BY Uname LIMIT ?";  
                        $q = $conn->prepare($sql);  
                        $q->bindParam(1, $searchword, PDO::PARAM_STR);
                        $q->bindParam(2, $count, PDO::PARAM_INT);
                        $q->execute();

TACK nu funkar det :D kanske borde ha sagt att jag använder pdo (a)

125 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
122 ms — hämta tråd, inlägg och bilagor (db)