Php mysqli bind_参数中的动态变量绑定

Php mysqli bind_参数中的动态变量绑定,php,mysqli,Php,Mysqli,当我尝试在下面编写代码时,它会给我一个警告 mysqli_stmt::bind_param(): Number of elements in type definition string doesn't match number of bind variables $stmt = $mysqli->prepare('SELECT * FROM users WHERE lname = ? AND fname = ?'); $type = "ss"; $p

当我尝试在下面编写代码时,它会给我一个警告

mysqli_stmt::bind_param(): Number of elements in type definition string doesn't match number of bind variables

$stmt = $mysqli->prepare('SELECT * FROM users WHERE lname = ? AND fname = ?');
    $type = "ss";
    $param = array("Maq","bool");
    $params[] = &$type;
    $params[] = &$param;

    call_user_func_array( array($stmt, 'bind_param'), $params );

我真的不知道为什么会发生这种情况,我在Stack Overflow中读了很多相同标题的问题,但有些问题使用逗号分隔的类型,或者需要更多的类型,但在我的情况下,我认为这是正确的,但为什么我一直收到警告?

这是一个迟来的答案,我希望能帮助别人

$stmt = $mysqli->prepare('SELECT * FROM users WHERE lname = ? AND fname = ?');
$stmt->bind_param('ss', $param[0], $param[1]);
$stmt->execute();

//other version
$stmt = $mysqli->prepare('SELECT * FROM users WHERE lname = ? AND fname = ?');
$type = "ss";
$names = array("Maq", "bool");
$params = array(&$type, &$names[0], &$names[1]);

call_user_func_array(array($stmt, 'bind_param'), $params);
它是mysqliLayer类的一部分,所以我提取了所需的变量

// establish mysqli connection
$conn = new mysqli(.....); 
$tableName = 'users';
// Types to bind
$type = 'isss';
$fields = ['id','name', 'email', 'created'];
$values = [1, 'angel', 'email@test.com', '2018-1-12'];

$sql = "INSERT INTO " . $tableName . " (" . join(',', $fields) . ") VALUES (?,?,?,?)";

$stmt = $conn->prepare($sql);
// Using ...token introduced in php v.5.6 instead of call_user_func_array
// This way references can be omitted, like for each value in array
$stmt->bind_param($type, ...$values);

$stmt->execute();

$stmt->close();

我想要它:)像这样吗?关于call_user_func_数组,请参见:Thank@Spoke44,但他使用的是过程式风格,我必须坚持使用OOP:/Thankkk uu这么多它的工作,但我没有得到它有什么问题??数组参数必须只包含值。您向它传递了一个值数组!