Ich muss eine Zeile mit PHP mysql verbesserte Bibliothek in eine Tabelle in mysql einfügen, die ihren Primärschlüssel vom Typ VARBINARY hat. Der Inhalt dieses Felds ist ein berechneter sha1-Hash.PHP - Einfügen von Binärdaten in mysql mit vorbereiteten Anweisungen
Wenn ich die Abfrage auf die alte Weise laufen funktioniert es perfekt:
$mysqli->$query("INSERT INTO table (id, field1) VALUES (0x" . $id . ",'" . $field1 . "')");
Aber wenn ich versuche, es als eine vorbereitete Anweisung auszuführen, kann ich nicht herausfinden, wie es zu tun. Wenn führe ich die entsprechende Aktion:
if($stmt = $mysqli->prepare("INSERT INTO table (id, field1) VALUES (?, ?)")) {
$stmt->bind_param('ss', "0x".$id, $field1);
//execute statement
}
Es löst eine Ausnahme zu sagen, dass die Inhalte für diesen Bereich zu groß waren. Und wenn ich versuche, es als ein BLOB-Feld einzufügen:
if($stmt = $mysqli->prepare("INSERT INTO table (id, field1) VALUES (?, ?)")) {
$stmt->bind_param('bs', $id, $field1);
//execute statement
}
Es gibt keinen Fehler, wird die Zeile eingefügt, aber das Kennungsfeld nun leer ist (nicht null, leer).
Ich weiß, ich kann die Abfrage mischen und geben Sie die ID in der Zeichenfolge und die anderen Felder als Bindeparameter der vorbereiteten Anweisung verkettet, aber ich frage nur, um zu wissen, was ist der richtige Weg, um dies und vielleicht es einfügen wird jemandem in der Zukunft helfen.
Welche Werte haben Sie für $ id und field1 $, wenn Sie dies tun? Ist $ id eine ganze Zahl? Wenn ja, hast du versucht, es als solches zu binden? 'stmt-> bind_param ('is', $ id, $ field1);' – nash
Der Wert von $ id ist ein sha1-Hash. Es ist keine ganze Zahl. Die anderen Felder verursachen das Problem nicht, sondern sind hauptsächlich Zeichenfolgen. –
Plus eine für den Versuch, die Sicherheit der vorbereiteten Anweisungen beizubehalten, während dieses Problem gelöst wird. – HoldOffHunger