2011-09-14 9 views
0

これは簡単に思えますが、本当に張り付いています。Mysqli問題:型定義文字列の要素の数がバインド変数の数と一致しません

私はこのクエリに

$sql="insert into employers (id, username, password, email, contact_person, company_name, location_country, location_state,  location_address, website, profile, logo, subdomain, activation_key, ipaddress) values ('', ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; 

$params="$reg_username, $reg_password, $reg_email, $reg_contact_person, $reg_companyname, $reg_country, $reg_state, $reg_address, $reg_website, $reg_profile, $reg_logo, $reg_subdomain, $reg_activation_key, $reg_ip"; 

$resultobj=otherquery ($sql, "sssssssssbssss", $params); 

function otherquery ($sql, $types, $params) 
    { 
     $connection = getConnect(); 
     $result = $connection->prepare("$sql"); 
     $result->bind_param($types, $params); 
     $status = $result->execute(); 
     $result->store_result(); 
     $return=array('obj'=>$result, 'status' => $status, 'data'=>array()); 
     return $return; 
    } 

を実行してみてください、私はこのエラーを取得しておいてください。

Warning: mysqli_stmt::bind_param() [mysqli-stmt.bind-param]: Number of elements in type definition string doesn't match number of bind variables in /home/xyz/public_html/xyzabc.com/functions.php on line 69 

iが正しく何を数えていないのですか?

おかげ

答えて

0

あなたは、すべてのパラメータを格納するために$paramsを使用することはできません:エラーしたがって、$paramsで呼び出されたときにbind_param()は、2つのパラメータのみを見ています。あなたは、それらを直接渡す必要があります:

$result->bind_param($types, $reg_username, $reg_password, $reg_email, $reg_contact_person, ...); 
+0

これは外部から呼び出される必要がある外部です。どのように私はそれを処理するのですか? –

0

私は、問題を修正したと思う:

私は関数の配列としてパラメータを渡すとcall_user_func_arrayを使用しました。

$newparams = array_merge((array) $types, $params); 
call_user_func_array(array($result, 'bind_param'), $newparams);