现在我正在尝试创建一个MySQLi类,以便更轻松地输入代码,因此它看起来更干净,整体上更实用。
我正在尝试编写一个函数,该函数将使用预准备语句执行查询。我的困境是:
public function safeRead($query, $data, $params)
{
$stmt = $mysqli->prepare($query);
$stmt->bind_param($params, $data);
$stmt->execute();
$result = $stmt->get_result();
$check = $result->fetch_assoc();
}
我当然想要执行查询,如您所见。我的问题在于$ data变量。我怎样才能将数据作为字符串传递,并可能转换为数组或可用的东西,以便与bind_param一起使用?
答案 0 :(得分:-1)
bind_param prototype看起来像这样:
bool mysqli_stmt::bind_param ( string $types , mixed &$var1 [, mixed &$... ] )
所以它接受一个类型sssd
的字符串,以及那些类型的一堆变量
假设您传递的是正确类型的变量
$stmt->bind_param($params, $data);
这样做的方法是
public function safeRead($query, $data, $params)
{
$stmt = $mysqli->prepare($query);
$params = str_split( $params ); // Split the params 'sssd'
foreach( $data as $k => $v ) {
$stmnt->bind_param( $params[$k], $data[$k] );
}
$stmt->execute();
$result = $stmt->get_result();
$check = $result->fetch_assoc();
}
这是未经测试的。
修改
由于bind_param的第二个参数是通过引用传递的,因此您可能需要在绑定之前创建一个中间变量,而不是绑定数组项。
foreach( $data as $k => $v ) {
$var_name = 'var'.$k;
$$var_name = $v;
$stmnt->bind_param( $params[$k], $$var_name );
}
但我不是100%肯定。