webForumDet fria alternativet

Fel antal variabler i prepared statments

PHP

3 svar · 638 visningar · startad av Jester73

Medlem sedan mars 2012121 inlägg
Frågan#1

Hej

Får följande felmeddelande

Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement in /share/MD0_DATA/Web/devsoladmin/include/dbops.php on line 41

när jag kör följande fråga

$sql = "SELECT K.Kund_ID, K.Namn, K.Kundnr FROM tblKund AS K WHERE K.Kund_ID NOT IN (SELECT KundID FROM tblLBokf WHERE Period>='?') AND K.Avslutad = FALSE ORDER BY K.Kundnr";
        $resultat=$dbops->dbselect($sql,"s","2015-12-07");

funktionen i dbops ser ut så här

function dbselect($sql,$paratype,$params){
if(!$stmt=self::$connect->prepare($sql)){
            die('Query error: ' . self::$connect->errno . '-' . self::$connect->error);
        }
        $stmt->bind_param($paratype,$params);
        $stmt->execute();
        $result=$stmt->get_result();
        
      
        if ($result->num_rows == 1) {    
            return $result->fetch_assoc();
        }
        elseif($result->num_rows > 1){
            return $result->fetch_all(MYSQLI_ASSOC);
        }
        else {
            return $result;
        }
        $result->free();

jag har ju bara 1 variabel och den är en sträng så varför stämmer det inte?
Lär ju vara ett litet komma jag glömt någonstans :birp

Medlem sedan jan. 2005953 inlägg
#2

Ta bort apostroferna runt frågetecknet i din SQL-fråga.

Medlem sedan mars 2012121 inlägg
#3

:D
Tackar, funkar fint.
Lite ologiskt då jag var tvungen att sätta dem inom ' om jag körde frågan på traditionellt sätt.

Medlem sedan jan. 2005953 inlägg
#4

När du kör prepared statements ska du inte använda apostrofer, det gör också att du slipper oroa dig för SQL-injections. Mysqli/PDO sköter det åt dig.

256 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)