Je dois insérer une ligne en utilisant la bibliothèque mysql améliorée de php dans une table de mysql qui a sa clé primaire de type VARBINARY. Le contenu de ce champ est un hachage sha1 calculé.PHP- insérer des données binaires dans mysql en utilisant des instructions préparées
Si je lance la requête à l'ancienne, il fonctionne parfaitement:
$mysqli->$query("INSERT INTO table (id, field1) VALUES (0x" . $id . ",'" . $field1 . "')");
Mais lorsque je tente de l'exécuter comme une déclaration préparée, je ne peux pas comprendre comment le faire. Si je effectuer l'action équivalente:
if($stmt = $mysqli->prepare("INSERT INTO table (id, field1) VALUES (?, ?)")) {
$stmt->bind_param('ss', "0x".$id, $field1);
//execute statement
}
Il jette une exception en disant que le contenu était trop grand pour ce domaine. Et si j'essaie de l'insérer comme un champ BLOB: la ligne est insérée, mais le champ d'identification est maintenant vide (non nul, vide)
if($stmt = $mysqli->prepare("INSERT INTO table (id, field1) VALUES (?, ?)")) {
$stmt->bind_param('bs', $id, $field1);
//execute statement
}
Il ne donne aucune erreur,.
Je sais que je peux mélanger la requête et entrer l'identifiant concaténé dans la chaîne et les autres champs comme paramètres de liaison de l'instruction préparée, mais je demande juste de savoir quelle est la bonne façon d'insérer cela et peut-être aidera quelqu'un dans le futur.
Quelles sont les valeurs que vous avez pour $ id et field1 $ quand vous faites cela? Est-ce que $ id est un entier? Si oui, avez-vous essayé de le relier comme tel? 'stmt-> bind_param ('est', $ id, $ field1);' – nash
la valeur de $ id est un hash sha1. Ce n'est pas un nombre entier. Les autres champs ne causent pas le problème mais sont principalement des chaînes. –
Plus un pour essayer de conserver la sécurité des instructions préparées tout en résolvant ce problème. – HoldOffHunger