您好我正在尝试使用perl将一些数据插入到mysql中。 我有一个数组,我想插入表中。但问题是数组有一个“'” 。当我尝试插入它时,mysql查询失败了。
#!/usr/bin/perl
use DBI;
@abc = "FUJI-XEROX CO. LTD. ADVANCED TECH & ENG'G CENTER 9-50 CHUO 2-CHOME, EBINA-SHI KANAGAWA 24 JAPAN";
$dbh = DBI->connect('dbi:mysql:remotegenius;host=localhost', 'root', 'active123') or die "Connection Error: $DBI::errstr\n";
$dbh->do("insert into OUI set `oui`='$abc'");
当我执行代码时我得到了
DBD::mysql::db do 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 'G CENTER 9-50 CHUO 2-CHOME, EBINA-SHI KANAGAWA 24 JAPAN'' at line 1 at ./test.pl line 9.
我需要有人从mysql和perl专业知识中获得帮助。
答案 0 :(得分:3)
首先,每个程序顶部的use strict
和use warnings
必要。它通过揭示简单的错误来节省大量时间,并且会提醒您将字符串放入数组@abc
然后在SQL语句中使用标量$abc
。我在此假设您打算始终使用$abc
。
您的错误是因为这不是INSERT
语句的样子。您还需要在$abc
中正确转义并引用字符串,因为它包含单引号,因此您必须编写
$dbh->do(sprintf 'INSERT INTO oui (oui) VALUES (%s)', $dbh->quote($abc))
但最好先准备语句,然后再执行
my $insert = $dbh->prepare('INSERT INTO oui (oui) VALUES (?)');
以后
$insert->execute($abc);
或许你的意思是"UPDATE oui SET oui = ?"
?但是这会将oui
字段设置为表格每一行的相同值。
答案 1 :(得分:0)
如果需要插入值数组,请首先确保数组变量中包含值。
@vals = ('One', 'Two', 'Three');
错误是因为INSERT查询语法错误,这里是INSERT语法
INSERT INTO <table> (col1, col2) VALUES ('val1', 'val2)
以下是适用于您的代码段
use DBI;
my @vals = ('One', 'Two', 'Three');
$dbh = DBI->connect('dbi:mysql:remotegenius;host=localhost', 'root', 'active123') or die "Connection Error: $DBI::errstr\n";
my $in = $dbh->prepare('INSERT INTO oui (oui) VALUES (?)');
foreach (@vals) {
$in->execute($_);
}
`