2013-09-04 4 views
-1

내가 folowing 오류 받고 있어요 :bind_param에 매개 변수 배열을 전달하는 방법?

Warning: Wrong parameter count for mysqli_stmt::bind_param() 

을 내가 내가 bind_param 메소드의 매개 변수가 잘못된 길을 할당하고있어 그것 때문에 생각합니다. 문제는 bind_param에 배열 매개 변수를 전달하는 방법입니다.

$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); 
+0

여러 쿼리를 실행하거나 많은 쿼리를 단일 쿼리에 바인딩하려고합니까? – invisal

+0

많은 매개 변수를 단일 쿼리에 바인딩하려고합니다. bind_param에 타입과 값을 전달하기 위해 연관 배열을 사용하고 있습니다 만 – Marco

+0

MySQLi를 사용하는 이유는 무엇입니까? 나는 PDO의 분리 된'PDOStatement :: bindParam'이 더 잘 어울릴 것이라고 생각할 것이다. – Phil

답변

1

이 잘못 같습니다 :

$params = array('i'=>$get_release, 'i'=>$status); 

the docs에서 :

Note that when two identical index are defined, the last overwrite the first.

,691 내가 그것을 호출하는 방법

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; 
} 

이것은 :

내 기능입니다

하나의 요소가있는 배열을 전달하고 문에 두 개의 자리 표시자가 있습니다.

+0

배열은 2 개의 요소 (placeholder)를 가지고있다. $ get_release에 대한 타입 i와 $ 상태에 대한 타입 i는 – Marco

+0

입니다. @Marco -'array()'의 문법은 인덱스 (정수 또는 문자열)가'=>'의 왼쪽에오고 오른쪽에있는 값 . '$ get_release'와'$ status' 둘 다에 동일한 인덱스를 사용하고 있습니다. 두 번째는 첫 번째를 claw하기 때문에 배열은 하나만 길다. [docs] (http://php.net/manual/en/mysqli-stmt.bind-param.php)에 따르면 두 개의 자리 표시 자 위치에 대해 bind_param에 세 개의 인수를 전달해야하므로 배열은 'array ('ii ', $ get_release, $ status)'가 될 수 있습니다. –

+0

나는 그 배열을 모두 넘길 수 있다는 것을 알지 못했다. – Marco

관련 문제