Limit i Prepared statement

PHP

4 svar · 448 visningar · startad av alioooop

Medlem sedan feb. 2008120 inlägg
Trådstart#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)

291 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
150 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
135 ms — ändringar (db)