Beim Versuch, Daten mithilfe von mysqli-vorbereiteten Anweisungen in eine Datenbank einzufügen, kann der Fehler auftreten „Anzahl der Elemente in der Typdefinitionszeichenfolge stimmt nicht mit der Anzahl der Bindungsvariablen überein.“ Dieser Fehler tritt auf, wenn eine Diskrepanz zwischen der Anzahl der Platzhaltermarkierungen (?) in der SQL-Abfrage und der Anzahl der Zeichen in der an bind_param übergebenen Typdefinitionszeichenfolge besteht.
Im bereitgestellten Beispiel gibt es 65 Platzhalter Markierungen in der Abfrage und 65 Variablen, die an bind_param übergeben werden. Allerdings ist die Typdefinitionszeichenfolge nicht im Codeausschnitt angegeben, sodass nicht überprüft werden kann, ob die Anzahl der Zeichen mit der Anzahl der Bindevariablen übereinstimmt.
Die Typdefinitionszeichenfolge muss die gleiche Anzahl an Zeichen wie Platzhalter enthalten in der SQL-Abfrage, wobei jedes Zeichen den Datentyp des entsprechenden Platzhalters darstellt. In einer SQL-Abfrage mit drei Platzhaltern würde bind_param beispielsweise eine Typdefinitionszeichenfolge mit drei Zeichen erfordern, z. B. „sss“, um anzugeben, dass alle drei Platzhalter Zeichenfolgen sind.
Um den Fehler zu beheben, stellen Sie sicher, dass:
Hier ist ein korrigiertes Beispiel mit der Typdefinitionszeichenfolge:
// 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();
Das obige ist der detaillierte Inhalt vonWarum erhalte ich in meiner vorbereiteten Anweisung den Fehler „mysqli_stmt::bind_param(): Mismatch in Character Count and Bind Variables'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!