使用mysqli prepare动态插入数据库的功能

时间:2013-12-09 21:18:46

标签: php 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 个答案:

答案 0 :(得分:1)

从它的外观来看,你试图将逗号分隔的变量列表作为数组发送(而不是数组如何工作),并且你使用的是单引号,因此变量不会被插值到它们的值。

bind_param()期望在类型定义之后的参数列表。您没有发送列表,而是发送字符串'$email,$text,$img,$uip' 您对该功能的调用应如下所示:

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