webForumDet fria alternativet
Logga in / Bli medlem

Limit i Prepared statement

PHP

4 svar · 437 visningar · startad av alioooop

Medlem sedan feb. 2008120 inlägg
Frågan#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

Medlem sedan aug. 20039 340 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();
Medlem 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()

Medlem sedan aug. 20039 340 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();
Medlem 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)

255 ms totalt · 4 externa anrop · v20260731065814-full.5386d3bf
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)