[英]Perl DBI mysql update
名称键值。 。 。 。 。 。 用户名要更新
#!/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;
错误信息:
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.
请协助
您的语法错误来自“ SQL”中“值”是保留字的事实。 当它用作标识符时,您需要引用该令牌:
UPDATE jos_config SET `values` = ...
通常,MySQL会像您一样向您显示语法摘要在查询摘要开头的位置。
下一个问题是您没有正确引用与namekey
进行比较的文字值,而该文字值在MySQL中看起来像是标识符而不是字符串。 解决方案是忘记插值变量并使用参数化查询:
$connect->do('UPDATE jos_config SET `values`=? WHERE namekey=?', undef, $name, $id);
看起来您在名称键值$ id周围缺少一些引号:
$query = "UPDATE jos_config SET values = '$name' WHERE namekey = '$id';";
如果收到这样的错误,请打印出令人反感的语句:
print $query;
这表现了:
UPDATE jos_config SET values = 'Arty' WHERE namekey = username;
然后凝视它,直到您看到缺少的报价。
然后停止这样做并使用占位符:
$query = "UPDATE jos_config SET values=? WHERE namekey=?;";
$query_handle = $connect->prepare($query);
my $result = $connect->do($query, {}, $name, $id);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.