繁体   English   中英

mysqli_stmt :: bind_param():类型定义字符串中的元素数量与使用数组的绑定变量数量不匹配

[英]mysqli_stmt::bind_param(): Number of elements in type definition string doesn't match number of bind variables using array

我想向表中添加一些字段,但出现此错误:

Fatal error: Call to a member function bind_param() on a non-object in C:\wamp\www\GuildSite\Include\Database.php on line 69

这是我必须插入表中的函数:我确实将$ stmt === false移到了foreach循环之前

public function myinsert($sqlInsert,$param)
{
$stmt = $this->_connection->prepare($sqlInsert) ;
if ($stmt === FALSE) 
{
  die($this->_connection->error);
}
echo 'Parameters number: ' . sizeof($param) ;
foreach ( $param as $key => $field )
{
  $stmt->bind_param ( $key , $field ) ;
}

$result = $stmt->execute() ;
$stmt->close();
return $result ;
}

在具有表单的页面上,我具有以下参数,这就是我调用函数的方式:

$param[':name'] =$_POST["personaName"];
$param[':email'] = $_POST["email"];
$param[':pass'] = $_POST['password'] ;
$sqlInsert = "INSERT INTO `new_member`(`persona_name`, `email`, `password`) "
      . "VALUES (':name', ':email', ':pass');";
$db->myinsert($sqlInsert , $param) ;

$ sqlInsert no中的值附近有一个小错误。 这是排序的

我究竟做错了什么?

在表中插入新行后,我确实从phpMyadmin复制了sql插入。

我确实尝试运行执行

$result = $stmt->execute($param) ;

但它仍然不会在表格中插入任何字段。

这是我的数据库连接

public function __construct()
{
  try
  {
    $this->_connection = new mysqli(DB_SERVER,DB_USER,DB_PASS,DB_NAME) ;
  } 
  catch (Exception $e) 
  { 
    echo $e->errorMessage(); 
  }
}

当我检查数组的大小时,我得到的大小为3

看来您对bind_param()使用了错误的参数。 您必须指定一个字符串以将参数类型指示为第一个参数。 因此,您可以在运行时按照bind_param()要求检索数据类型的缩写,如下所示:

$types = '';
foreach ( $param as $key => $field )
{
  $types .= gettype($field)[0];
}

现在,可以将其用作bind_param()的第一个参数。 另外,仅查看文档,该函数似乎不允许命名的参数,仅允许索引的参数。 因此,似乎很难继续使用bind_param()执行查询。 该功能不太适合您的用例。 您可能会使用PDO mysql接口和PDO :: bindValue()来支持命名参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM