当我尝试将值插入到名为"index"的列的表中时,为什么会出现SQL语法错误?

Tim*_*m M 0 mysql perl blob insert

我试图使用perl 将二进制文件(JPG图像)插入MySQL数据库

表:

CREATE TABLE `images` (
    `sku` CHAR(12) NOT NULL,
    `index` TINYINT(1) UNSIGNED NOT NULL,
    `main` BLOB NULL
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
ROW_FORMAT=DYNAMIC
;
Run Code Online (Sandbox Code Playgroud)

Perl的:

$dbh_local = DBI->connect("DBI:mysql:database=db;host=127.0.0.1;mysql_enable_utf8=1", "XXX", "XXX", {'RaiseError' => 1, 'mysql_auto_reconnect' => 1});

open IMAGE, "c:/image.jpg" or die $!;
    while(read IMAGE, $buff, 1024) {
        $image .= $buff;
    }
close(IMAGE);

my $sku = 'VM1000032999';
my $index = 1;

$query = "INSERT INTO images (sku,index,main) values (?,?,?)";
$sth = $dbh_local->prepare($query);
$sth->bind_param(1,$sku);
$sth->bind_param(2,$index);
$sth->bind_param(3,$image, DBI::SQL_BLOB);
$sth->execute();        
$sth->finish();
Run Code Online (Sandbox Code Playgroud)

但是我收到此错误:

"DBD::mysql::st execute failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'index,main) values ('VM1000032999','1','????\0?JFIF\0???\0H\0H\0\0??\0?\0???????' at line 1 at ...."
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?我尝试了几种变体,都给出了同样的错误.

use*_*329 5

您正在使用的保留字index在你的INSERT INTO语句来.保留字作为标识符的使用仅允许使用第9.2节"模式对象名称"中所述的引号.

更改index`index`你的INSERT INTO发言.

我不建议在表格中使用保留字.