簡體   English   中英

Perl DBI MySQL更新

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM