1

namekey 値 . . . . . . 更新するユーザー名

#!/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.

手伝ってください

4

4 に答える 4

6

構文エラーは、「値」が SQL の予約語であるという事実に起因しています。トークンが識別子として機能する場合は、そのトークンを引用符で囲む必要があります。

UPDATE jos_config SET `values` = ...

通常、MySQL はクエリの抜粋の先頭にある構文エラーの場所を表示します。

次の問題は、比較するリテラル値を適切に引用していないことです。namekeyそのリテラル値は、MySQL にとって文字列ではなく識別子のように見えます。ここでの解決策は、変数の補間を忘れて、パラメーター化されたクエリを使用することです。

$connect->do('UPDATE jos_config SET `values`=? WHERE namekey=?', undef, $name, $id);
于 2012-09-12T04:16:41.017 に答える
0

このようなエラーが発生した場合は、問題のあるステートメントを出力してください。

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);
于 2012-09-12T03:56:43.327 に答える
0

namekey 値 $id の周りにいくつかの引用符が抜けているようです:

$query = "UPDATE jos_config SET values = '$name' WHERE namekey = '$id';";
于 2012-09-12T02:54:13.357 に答える