1

现在,我正在尝试制作一个 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 一起使用?

4

1 回答 1

-1

bind_param 原型如下所示:

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% 确定。

于 2013-10-07T13:34:57.327 回答