我需要帮助我的功能,我建立,我试图使用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。
答案 0 :(得分:1)
从它的外观来看,你试图将逗号分隔的变量列表作为数组发送(而不是数组如何工作),并且你使用的是单引号,因此变量不会被插值到它们的值。
bind_param()
期望在类型定义之后的参数列表。您没有发送列表,而是发送字符串'$email,$text,$img,$uip'
您对该功能的调用应如下所示:
$stmt->bind_param("ssss", $email, $text, $img, $uip);