Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将参数数组传递给bind_param?_Php_Mysql_Prepared Statement - Fatal编程技术网

Php 如何将参数数组传递给bind_param?

Php 如何将参数数组传递给bind_param?,php,mysql,prepared-statement,Php,Mysql,Prepared Statement,我得到以下错误: Warning: Wrong parameter count for mysqli_stmt::bind_param() 我相信这是因为我给bind_param方法分配了错误的参数。问题是如何将参数数组传递给bind_param 这是我的职责: function read($sql, $params) { $parameters = array(); $results = array(); // connect $mysql = new mysqli

我得到以下错误:

Warning: Wrong parameter count for mysqli_stmt::bind_param()
我相信这是因为我给bind_param方法分配了错误的参数。问题是如何将参数数组传递给bind_param

这是我的职责:

function read($sql, $params)
{
   $parameters = array();
   $results = array();

   // connect
   $mysql = new mysqli('localhost', 'root', 'root', 'db') or die('There was a problem connecting to the database. Please try again later.');

   // prepare
   $stmt = $mysql->prepare($sql) or die('Error preparing the query');

   // bind param ????????????
   call_user_func_array(array($stmt, 'bind_param'), $params);

   // execute
   $stmt->execute();

   // bind result
   $meta = $stmt->result_metadata();

   while ( $field = $meta->fetch_field() ) {
      $parameters[] = &$row[$field->name]; 
   }

   call_user_func_array(array($stmt, 'bind_result'), $parameters);

   // fetch
   while( $stmt->fetch() ) {
     $x = array();

     foreach( $row as $key => $val ) {
        $x[$key] = $val;
     }

     $results[] = $x;
  }

  return $results;
}
我这样称呼它:

$params = array('i'=>$get_release, 'i'=>$status);
$result_set = read('SELECT release_id, release_group_id, status_id, name, subname, description, released_day, released_month, released_year, country_id, note, is_master_release, seo_url, meta_description, is_purchased FROM `release` WHERE release_id = ? AND status_id = ?', $params);
这似乎是错误的:

$params = array('i'=>$get_release, 'i'=>$status);
发件人:

请注意,当定义两个相同的索引时,最后一个索引将覆盖第一个索引


您正在传递一个包含一个元素的数组,并且您的语句有两个占位符。

您是要执行多个查询还是要将多个参数绑定到一个查询?我正在尝试将多个参数绑定到一个查询。我想过使用关联数组来传递类型和值以绑定_param,您使用MySQLi的原因是什么?我认为PDO的离散
PDOStatement::bindParam
会适合better@Phil也许在将来的更新中我会使用PDO,因为数组有2个元素(占位符),不是吗?$get_发布的类型i和$get_发布的类型i$status@Marco-数组()的语法是索引(整数或字符串)位于
=>
的左侧,值位于右侧。您对
$get\u release
$status
使用相同的索引。第二个数组会重击第一个数组,因此数组只有一个长度。根据,对于两个占位符位置,您应该将三个参数传递给
bind_param
,因此数组应该是:
array('ii',$get_release,$status)
。我不知道您可以像那样在一个数组中传递所有参数。一旦我声明了way@Marco-有关解决方案,请参阅。这和你想做的非常接近。