[英]mysqli_stmt::bind_param(): Number of elements in type definition string doesn't match number of bind variables warning
[英]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.