0

私は小さな問題を抱えており、誰かがそれに対する解決策を持っていると確信しています。符号なし整数のセットから変換されたバイナリデータがあります

$_BIN=pack('I*', 3563547,6587568,5468456,6458568,4568568);

varbinary 列を含むテーブルに挿入したい

$strSQL = "INSERT INTO table_name (id, ba) VALUES($id, $_BIN)";

何らかの理由で次のエラーが表示されます

Erreur SQL : SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルを参照して、1 行目の '_' の近くで使用する正しい構文を確認してください。 ²EÎóp>)

皆さんが私を助けてくれることを願っています

4

1 に答える 1

1

これは私のために働く:

DROP TABLE IF EXISTS `binary`;
CREATE TABLE `binary`(
id INT NOT NULL AUTO_INCREMENT, 
ba VARBINARY( 100 ),
PRIMARY KEY(`id`)
) ENGINE=MYISAM;

および PHP コード (PDO を使用):

<?php
$db = new PDO('mysql:dbname=test;host=localhost:4040','xxx','xxxx');

$_BIN=pack('I*', 3563547,6587568,5468456,6458568,4568568);

$rs = $db->prepare("INSERT INTO `binary`(`ba`) VALUES(?)");

$rs->execute(array($_BIN));

アップデート

名前付きパラメーターを使用して提案されたコードに基づくコードの下を参照してください。

<?php
$_SNB = 23;
$_USR = "toto";
$_BIN = pack('I*', 24325, 2556456, 547577, 675746, 535646, 4564575, 575474, 4735);

$db = new PDO('mysql:host=localhost:4040;dbname=test','xxxx','xxxx');
$db->exec('SET CHARACTER SET utf8');
$rs = $db->prepare("INSERT INTO `spw_license` (`serial_num`, `user`, `ba_struct`) 
                  VALUES(:serial_num, :username, :ba_struct)");

$rs->bindValue(':serial_num', $_SNB, PDO::PARAM_INT);
$rs->bindValue(':username', $_USR);
$rs->bindValue(':ba_struct', $_BIN, PDO::PARAM_LOB);

try {
    if(!$rs->execute()) {
        var_dump($db->errorInfo());
    }
} catch(Exception $e) {
    echo 'got Exception: ' . $e->getMessage() . PHP_EOL;
}

起動後のテーブルは次のようになります。

mysql> select * from `spw_license`;
+------------+------+----------------------------------+
| serial_num | user | ba_struct                        |
+------------+------+----------------------------------+
|         23 | toto | ♣_  (☻' ∙ вO
 ^ _жE Є ⌂↕   |
+------------+------+----------------------------------+
1 row in set (0.00 sec)
于 2013-03-25T18:22:19.503 に答える