2013-06-21 11 views
5

この大規模な頭痛は私が実行する必要があるクエリを誘導していますフォーム入力はmysqliプリペアドステートメントを使用してデータベース。mysqli_stmt :: bind_param():型定義文字列内の要素数がバインド変数の数と一致しません

私が実行している問題は、bind_paramを呼び出そうとしている変数の数が、使用している#の "s"の数と一致しないということです。 私は十数時間を数えて、どこが間違っているのかわかりません。 65の変数があり、65の変数があります。

誰かが見逃していることがありますか?または私はおそらく間違った方法でbind_paramメソッドを使用していますか?

// Preparing our query statement via mysqli which will auto-escape all bad characters to prevent injection 
$query3 = 'INSERT INTO datashep_AMS.COMPLETE_APPLICATIONS (
    project_name, 
    status, 
    funding_requested, 
    project_title, 
    program, 
    county, 
    parish, 
    name_of_watercourse, 
    which_is_a_tributary_of, 
    name_of_applicant, 
    contact_person_or_project_supervisor, 
    relationship_to_organization, 
    business_phone, 
    home_phone, 
    email, 
    signature_of_thesis_or_study_supervisor, 
    mailing_address, 
    postal_code, 
    website, 
    mailing_address_for_payment, 
    hst_registration_no, 
    total_cost_dollar, 
    total_cost_percent, 
    dollar_amount_requested_from_nbwtf, 
    percent_amount_requested_from_nbwtf, 
    descriptive_summary, 
    background_of_organization, 
    mandate, 
    years_in_existence, 
    membership, 
    accomplishments, 
    previous_project_name, 
    previous_project_number, 
    previous_project_amount_received_from_nbwtf, 
    summary_of_activities, 
    summary_of_Results, 
    project_title_2, 
    reason_and_or_purpose, 
    objectives, 
    project_description, 
    methods, 
    equipment_and_materials_required, 
    personnel_required, 
    proposed_start_date, 
    proposed_end_date, 
    type_of_data_to_be_stored, 
    where_will_it_be_housed, 
    monitoring, 
    short_term_achievement, 
    long_term_achievement, 
    previous_studies, 
    required_permits, 
    consultants, 
    short_term_commitment, 
    long_term_commitment, 
    project_duration, 
    project_evaluation, 
    promotion_of_project, 
    promotion_of_client, 
    publication_of_results, 
    community_benefits, 
    effects_on_traditional_uses, 
    possible_changes_in_public_access_to_areas, 
    possible_impact_on_wildlife_and_or_environment, 
    likelihood_of_future_requests_for_funding, 
    list_all_other_funding_sources_for_this_project 
) VALUES (
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ? 
)'; 

// "Preparing" the query using mysqli->prepare(query) -- which is the equivalent of mysql_real_escape_string -- in other words, it's the SAFE database injection method 
$stmt = $dbConnection->prepare($query3); 

// "Bind_param" == replace all the "?"'s in the aforementioned query with the variables below 

$stmt->bind_param("s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s", $project_name, $status, $funding_requested, $project_title, $program, $county, $parish, $name_of_watercourse, $which_is_a_tributary_of, $name_of_applicant, $contact_person_or_project_supervisor, $relationship_to_organization, $business_phone, $home_phone, $email, $signature_of_thesis_or_study_supervisor, $mailing_address, $postal_code, $website, $mailing_address_for_payment, $hst_registration_no, $total_cost_dollar, $total_cost_percent, $dollar_amount_requested_from_nbwtf, $percent_amount_requested_from_nbwtf, $descriptive_summary, $background_of_organization, $mandate, $years_in_existence, $membership, $accomplishments, $previous_project_name, $previous_project_number, $previous_project_amount_received_from_nbwtf, $summary_of_activities, $summary_of_Results, $project_title_2, $reason_and_or_purpose, $objectives, $project_description, $methods, $equipment_and_materials_required, $personnel_required, $proposed_start_date, $proposed_end_date, $type_of_data_to_be_stored, $where_will_it_be_housed, $monitoring, $short_term_commitment, $long_term_achievement, $previous_studies, $required_permits, $consultants, $short_term_commitment, $long_term_commitment, $project_duration, $project_evaluation, $promotion_of_project, $promotion_of_client, $publication_of_results, $community_benefits, $effects_on_traditional_uses, $possible_changes_in_public_access_to_areas, $possible_impact_on_wildlife_and_or_environment, $likelihood_of_future_requests_for_funding, $list_all_other_funding_sources_for_this_project); 

// Perform the actual query! 
$stmt->execute(); 
+0

カンマ区切り形式はどこにありますか? –

+0

そして、なぜPHPユーザーが単純な挿入クエリのために数百キロバイトのコードを書いているのか理解できません。 –

+0

全開示:私は初心者ですから、(まだ)より良い方法を本当に知っているわけではありません。 –

答えて

16

文字列内の文字は、カンマで区切るべきではありません:あなたはthe manual page上の例で示され、この形式を見ることができます

$stmt->bind_param("sss...", /* variables */); 

+0

これは私の問題だったようです!ありがとう! –

3

65文字列のパラメータがありますので、65秒の場合は正しい番号があります。ただし、sをカンマで区切っているため、エラーが表示されます。代わりに$stmt->bind_param("s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s..." のそれは、これはあなたのエラーを解決する必要があり

$stmt->bind_param("sssssssssssssssss..." 

でなければなりません。

+0

これは私の問題を解決します。 – AndroidHacker

+0

これは私に大きな時間を助けました!ありがとう、PokeSteelProductions。 –

関連する問題