Maison > base de données > tutoriel mysql > le corps du texte

Pourquoi l'insertion de 0 dans un champ BIT(1) dans MySQL à l'aide de PDO donne-t-elle 1 ?

Susan Sarandon
Libérer: 2024-11-02 12:55:30
original
328 Les gens l'ont consulté

Why Does Inserting 0 into a BIT(1) Field in MySQL using PDO Result in 1?

Comprendre les problèmes d'insertion de valeur dans les champs Bit(1)

La programmation de base de données utilisant l'extension PDO de PHP peut présenter des défis lors de la manipulation de données, en particulier avec types de données binaires comme bit(1). Cet article explore un problème courant rencontré lors de l'insertion d'une valeur de 0 dans un champ bit(1), entraînant une valeur inattendue dans la base de données.

Énoncé du problème

L'insertion d'une valeur de 0 dans un champ bit(1) à l'aide d'instructions préparées par PDO donne une valeur stockée de 1. Cette différence se produit lors de l'utilisation des méthodes espace réservé (?), espace réservé nommé (:placeholder), bindValue() et bindParam(). L'interrogation de la base de données directement à l'aide de l'instruction SQL sans espaces réservés insère la valeur correcte de 0.

Solution

La solution recommandée consiste à modifier le type de champ à partir de bit(1) à TINYINT(1). Les types de données BIT peuvent entraîner des problèmes de compatibilité avec les bibliothèques clientes, notamment PDO. Il est important d'utiliser TINYINT(1) au lieu de BIT(1) pour stocker les valeurs booléennes afin d'éviter de tels problèmes.

Solution alternative pour BIT(1)

En cas de changement le type de champ n'est pas réalisable, l'utilisation de la méthode bindValue() avec l'indice de type PDO::PARAM_INT peut résoudre le problème. L'extrait de code suivant le démontre :

<code class="php">$pdo = new PDO("connection string etc");
$statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES (:someText,:testBool)');
$statement->bindValue(':someText', "TEST");
$statement->bindValue(':testBool', 0, PDO::PARAM_INT);
$statement->execute();</code>
Copier après la connexion

Takeaway

L'utilisation de TINYINT(1) est la méthode préférée pour stocker des valeurs booléennes dans une base de données MySQL. Cependant, si BIT(1) doit être utilisé, la méthode bindValue() avec l'indice de type PDO::PARAM_INT peut résoudre le problème de l'insertion de valeurs 0. Il est important de noter que les types de données BIT peuvent entraîner une incompatibilité avec certaines bibliothèques clientes et doivent être utilisés avec prudence.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!