Heim >Datenbank >MySQL-Tutorial >Warum erhalte ich in meiner vorbereiteten Anweisung den Fehler „mysqli_stmt::bind_param(): Mismatch in Character Count and Bind Variables'?

Warum erhalte ich in meiner vorbereiteten Anweisung den Fehler „mysqli_stmt::bind_param(): Mismatch in Character Count and Bind Variables'?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-21 17:20:11334Durchsuche

Why am I getting the

mysqli_stmt::bind_param(): Nichtübereinstimmung in Zeichenanzahl und Bindungsvariablen

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:

  • Die SQL-Abfrage enthält die richtige Anzahl von Platzhaltermarkierungen.
  • Die für bind_param bereitgestellte Typdefinitionszeichenfolge stimmt mit überein Anzahl der Platzhaltermarkierungen und gibt den richtigen Datentyp für jeden Platzhalter an.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn