Maison  >  Article  >  base de données  >  Pourquoi est-ce que j'obtiens l'erreur « mysqli_stmt::bind_param() : Mismatch in Character Count and Bind Variables » dans ma déclaration préparée ?

Pourquoi est-ce que j'obtiens l'erreur « mysqli_stmt::bind_param() : Mismatch in Character Count and Bind Variables » dans ma déclaration préparée ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-21 17:20:11271parcourir

Why am I getting the

mysqli_stmt::bind_param() : incompatibilité dans le nombre de caractères et les variables de liaison

Lorsque vous essayez d'insérer des données dans une base de données à l'aide d'instructions préparées par mysqli, vous pouvez rencontrer l'erreur "Le nombre d'éléments dans la chaîne de définition de type ne correspond pas au nombre de variables de liaison." Cette erreur se produit lorsqu'il y a une incompatibilité entre le nombre de marqueurs d'espace réservé (?) dans la requête SQL et le nombre de caractères dans la chaîne de définition de type transmise à bind_param.

Dans l'exemple fourni, il y a 65 espaces réservés. marqueurs dans la requête et 65 variables transmises à bind_param. Cependant, la chaîne de définition de type n'est pas spécifiée dans l'extrait de code, il est donc impossible de vérifier si le nombre de caractères correspond au nombre de variables de liaison.

La chaîne de définition de type doit contenir le même nombre de caractères que les espaces réservés. dans la requête SQL, où chaque caractère représente le type de données de l'espace réservé correspondant. Par exemple, dans une requête SQL avec trois espaces réservés, bind_param nécessiterait une chaîne de définition de type comportant trois caractères, telle que « sss », pour indiquer que les trois espaces réservés sont des chaînes.

Pour résoudre l'erreur, assurez-vous que :

  • La requête SQL contient le nombre correct de marqueurs d'espace réservé.
  • La chaîne de définition de type fournie à bind_param correspond au nombre de marqueurs d'espace réservé et spécifie le type de données correct pour chaque espace réservé.

Voici un exemple corrigé avec la chaîne de définition de type incluse :

// 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();

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn