Mysql插入查询失败

时间:2014-09-08 17:09:26

标签: mysql linux perl

您好我正在尝试使用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专业知识中获得帮助。

2 个答案:

答案 0 :(得分:3)

首先,每个程序顶部的use strictuse 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($_);
}

`