Apabila cuba memasukkan data ke dalam pangkalan data menggunakan pernyataan yang disediakan mysqli, anda mungkin menghadapi ralat "Bilangan elemen dalam rentetan definisi jenis tidak sepadan dengan bilangan pembolehubah ikatan." Ralat ini berlaku apabila terdapat ketidakpadanan antara bilangan penanda ruang letak (?) dalam pertanyaan SQL dan bilangan aksara dalam rentetan definisi jenis yang dihantar kepada bind_param.
Dalam contoh yang disediakan, terdapat 65 ruang letak penanda dalam pertanyaan dan 65 pembolehubah dihantar ke bind_param. Walau bagaimanapun, rentetan definisi jenis tidak dinyatakan dalam coretan kod, jadi adalah mustahil untuk mengesahkan sama ada bilangan aksara sepadan dengan bilangan pembolehubah ikatan.
Rentetan definisi jenis mesti mengandungi bilangan aksara yang sama seperti ruang letak. dalam pertanyaan SQL, di mana setiap aksara mewakili jenis data pemegang tempat yang sepadan. Contohnya, dalam pertanyaan SQL dengan tiga ruang letak, bind_param memerlukan rentetan definisi jenis dengan tiga aksara, seperti "sss" untuk menunjukkan bahawa ketiga-tiga ruang letak ialah rentetan.
Untuk menyelesaikan ralat, pastikan:
Berikut ialah contoh yang diperbetulkan dengan rentetan definisi jenis disertakan:
// 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( "ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss", $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();
Atas ialah kandungan terperinci Mengapakah saya mendapat ralat 'mysqli_stmt::bind_param(): Tidak Padan dalam Kiraan Aksara dan Pembolehubah Bind' dalam pernyataan saya yang disediakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!