我最近开始在PHP中使用OOP,我开始使用我非常熟悉的函数。我一直在研究与MySQL数据库连接的数据管理系统。在将内容插入数据库并出现此错误时,我遇到了一些问题:
Warning: mysqli_stmt::bind_param(): Number of elements in type definition string doesn't match number of bind variables ... on line 140
这是我的代码:
public function create_val( $content_array, $table )
{
$array_num = count($content_array);
// create value holders
$value_param = str_repeat( '?, ', $array_num );
$stmt_values = rtrim($value_param, ', ');
// create bind params
$stmt_param = str_repeat('s', $array_num);
foreach($content_array as $key => $value)
{
$key_val[] = $key;
$val[] = $value;
}
$table_rows = implode(', ', $key_val);
$insert_val = implode(', ', $val);
$sql = "INSERT " . $table . " (" . $table_rows . ") VALUES (" . $stmt_values . ")";
if($stmt = $this->_connection->prepare( $sql ))
{
try
{
$stmt->bind_param($stmt_param, $insert_val);
$stmt->execute();
$stmt->close();
}
catch(Exception $e)
{
echo "There was an unexpected problem. " . $e->getMessages();
}
}
}
我知道错误是由此行引起的:$stmt->bind_param($stmt_param, $insert_val);
。
但我只是不明白为什么;我已经检查了$stmt_param
和$insert_val
并且它们的数量匹配 - 在我正在运行的特定尝试中。
这些值将作为$key => $value
对插入。这是我打电话给班级的设置:
$array = array(
'column1' => 'an item',
'column2' => 'a second content',
'column3' => 'some information',
'column4' => 'what what what???'
);
$db->create_val($array, 'table_name');
我使用此功能的目标是可重复使用和模块化,因为我可以编写代码。我看了很多类似的问题,但没有发现任何我可以使用的问题。即使是在课堂上,它们也不能用于不同的目的,我的目的是可以重复使用。
答案 0 :(得分:3)
从PHP 5.6起,您可以使用unpacking operator调用bind_param
函数,这样您就可以直接调用它(并且不使用call_user_func_array
),只需更改此行...
$stmt->bind_param($stmt_param, ...$val);