首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl DBI mysql更新

Perl DBI mysql更新
EN

Stack Overflow用户
提问于 2012-09-12 10:38:06
回答 4查看 7K关注 0票数 1

名称键值。。。。。。要更新的用户名

代码语言:javascript
复制
#!/usr/bin/perl -w
# Use the DBI module

use  strict;
use warnings;
use DBI;

# CONFIG VARIABLES
my $platform = "mysql";
my $database = "prod";
my $host     = "localhost";
my $username = "root";
my $password = "admin";

# DATA SOURCE NAME
my $dsn = "dbi:$platform:$database:$host";

# PERL DBI CONNECT
my $connect = DBI->connect($dsn, $username, $password);

# VARS for Examples
my $query;
my $query_handle;
my $id;
my $demo;

# Example 2 using do() UPDATE   

# SAMPLE VARIABLE AND VALUES TO PASS INTO SQL STATEMENT
$id   = "username";
$name = "Arty";

# do() THE UPDATE
$query        = "UPDATE jos_config SET values = '$name' WHERE namekey = $id;";
$query_handle = $connect->prepare($query);

# EXECUTE THE UPDATE
$query_handle = $connect->do($query);

print STDERR "ERROR: $DBI::errstr";
print STDERR "INFO: $query_handle rows updated";

undef $query;

错误消息:

代码语言:javascript
复制
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 'values = 'Arty' WHERE namekey = smtp_username' at line 1 at /home/arty/Documents/SmtpDbchange2.pl line 40.
ERROR: 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 'values = 'Arty' WHERE namekey = smtp_username' at line 1Use of uninitialized value $query_handle in concatenation (.) or string at /home/arty/Documents/SmtpDbchange2.pl line 43.

请协助

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-12 12:16:41

您的语法错误来自于"values“在SQL中是一个保留字。当该标记用作标识符时,您需要对其进行引号:

代码语言:javascript
复制
UPDATE jos_config SET `values` = ...

通常,MySQL只在查询摘录的开头显示语法错误的位置,就像它为您所做的那样。

您的下一个问题将是没有正确地引用与namekey比较的文字值,并且对于MySQL,该文字值看起来像一个标识符而不是字符串。这里的解决方案是忘记插值变量,并使用参数化查询:

代码语言:javascript
复制
$connect->do('UPDATE jos_config SET `values`=? WHERE namekey=?', undef, $name, $id);
票数 6
EN

Stack Overflow用户

发布于 2012-09-12 10:54:13

看起来您缺少了名称键值$id周围的一些引号:

代码语言:javascript
复制
$query = "UPDATE jos_config SET values = '$name' WHERE namekey = '$id';";
票数 0
EN

Stack Overflow用户

发布于 2012-09-12 11:56:43

如果您收到类似这样的错误,请打印出有问题的语句:

代码语言:javascript
复制
print $query;

它显示了:

代码语言:javascript
复制
UPDATE jos_config SET values = 'Arty' WHERE namekey = username;

然后盯着它看,直到你看到缺少的引号。

然后停止这样做,并使用占位符:

代码语言:javascript
复制
$query = "UPDATE jos_config SET values=? WHERE namekey=?;";
$query_handle = $connect->prepare($query);
my $result = $connect->do($query, {}, $name, $id);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12380528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档