gpt4 book ai didi

mysql - Perl 或 MySQL 问题

转载 作者:行者123 更新时间:2023-11-30 23:39:47 24 4
gpt4 key购买 nike

我正在尝试按照附件编写一个非常简单的 MySQL SELECT 查询:

#
# MODULES
#

use strict;
use DBI;
use DBD::mysql;

#
# CONNECT
#
my $dbd = DBI->connect("dbi:mysql:dbname=$db_name;host=$host;mysql_server_prepare=1;",$db_user, $db_pwd)
or die 'No connection to dB : '.DBI::errstr;
#
# PREPARE
#
my $query = "SELECT * FROM $table WHERE $search_field = ? ";
my $prep = $dbd->prepare($query)
or die "ERR: " .$dbd->errstr;
#
# EXECUTE
#
$prep->execute( $search_data )
or die 'ERR : '.$prep->errstr;
#
# SHOW
#
while (my @data = $prep->fetchrow_array ) {
foreach my $line (@data) {
print $line.', ';
}
print "\n";
}

带有 TinyText 的搜索字段。 (但也尝试了 varchar,结果相同)搜索字段编码为 utf8_unicode_ci(但也尝试了 latin_general_ci,结果相同)

如果我使用 $search_data 的纯数字链运行请求(如 0124345):好的,我得到了结果
如果我使用 $search_data 的纯文本链运行请求(如 AZERTY):好的,我得到结果

但是:

如果我使用混合文本/数字(如 AZERTY01234)运行请求:找不到记录,
如果我使用带有破折号、点等的混合文本(如 foo-bar)运行请求:找不到记录
如果我使用带有破折号、点等的混合文本(如 foo+bar)运行请求:找不到记录

我尝试了几种可能的修复方法但没有成功。(更改 SQL 数据类型,使用和不使用单引号/双引号,没有准备好的查询...)

我不知道为什么以及如何解决它。

提前感谢一些提示。

最佳答案

看起来 Perl 可能会混淆字符串、数字及其算术。

解释 OReilly 的 Perl DBI 编程,为了帮助确定在绑定(bind)值中提供的数据类型,您可以在执行绑定(bind)时提供一个额外的参数来指定数据类型。

在你的情况下,我会尝试类似下面的方法来强制绑定(bind)文本类型/SQL_VARCHAR

my $prep = $dbd->prepare($query) or die "ERR: " .$dbd->errstr;

$prep->bind_param( 1, $search_data, { TYPE => SQL_VARCHAR } );

$prep->execute( ) or die 'ERR : '.$prep->errstr;

关于mysql - Perl 或 MySQL 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4371823/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com