2013-12-09 64 views
0

我需要幫助,我的功能,我建立,我試圖使用MYSQLI準備,但我不是很好。功能動態插入到數據庫使用mysqli準備

這是我的函數:

function insertToDb($table,$rowsarray,$valuequestionmarks,$lenstrings,$valarray){ 

     $this->mysqli->set_charset("utf8"); 
     if ($insert_stmt = $this->mysqli->prepare(
     "INSERT INTO $table ($rowsarray) 
     VALUES 
     ($valuequestionmarks)" 
     )) 
     { 
     $insert_stmt->bind_param("$lenstrings",$valarray); 
     // Execute the prepared query. 
     if(!$insert_stmt->execute()) 
      { 
      die("Execute failed: (" . $insert_stmt->errno . ") " . $insert_stmt->error); 
      } 
     } 

    } 

這也是我怎麼稱呼:

    $img = "something.jpg"; 
        $uip = ulUtils::GetRemoteIP(false); 
        $table='forgotpassqm'; 
        $rowsarray = 'email,text,img,ip'; 
        $valuequestionmarks ='?,?,?,?'; 
        $lenstrings ='ssss'; 
        $valarray ='$email,$text,$img,$uip'; 

        $func->insertToDb($table,$rowsarray,$valuequestionmarks,$lenstrings,$valarray); 

,我不斷收到此錯誤:

Warning: mysqli_stmt::bind_param(): Number of elements in type definition string doesn't match number of bind variables 

而執行錯誤:

Execute failed: (2031) No data supplied for parameters in prepared statement 

我嘗試了一些組合沒有工作,我讀了其他問題沒有作爲我的,也沒有工作或幫助。

我知道這是關於ssss,但我使用4,它似乎是好的,所以我錯了嗎? 謝謝分配。

編輯:

$table output : forgotpassqm . 
$rowsaray output: email,text,img,ip . 
$valuequestionmarks output : ?,?,?,? . 
$lenstrings output: ssss. 
$valarray output: $email,$text,$img,$uip. 

我認爲這個問題是在$的valarray。

回答

1

從它的外觀判斷,你試圖發送一個以逗號分隔的變量列表作爲一個數組(而不是數組是如何工作的),並且你正在使用單引號,所以變量不會被內插到它們的值。

bind_param()需要類型定義之後的參數列表。您沒有發送清單,您正在發送字符串'$email,$text,$img,$uip'
你在該函數調用應該是這樣的:

$stmt->bind_param("ssss", $email, $text, $img, $uip); 
+0

什麼毛病我怎麼做?你看我是如何通過變量插入參數的嗎? – Ravg

+0

是的,我做了,但是你對'$ valarray ='$ email,$ text,$ img,$ uip';'的陳述只不過是一個字符串,因爲你使用了單引號。我想我明白你在做什麼,但我會建議你對實現有所不同。 – Crackertastic

+0

好吧,我明白了,我被吹了,這是問題,你有暗示?也許我用它作爲數組(),然後在函數中,我將使用列表? – Ravg