我有一个 MySql 数据库,其中包含多语言网站的所有文本,每种不同的语言都在一个单独的列中。(例如,列 'en',id 1 = 'Hello',列 'fr',id 1 = 'Bonjour',等等)
我正在使用 Perl/DBI 脚本,它根据用户语言和所需部分以通常的方式从数据库中提取文本,方法是准备查询、执行查询,然后将结果记录复制到数组中。不过,这一切对我来说似乎非常麻烦且效率低下。
这是我现在使用的业务端。
omy (@TEXT, $getText);
$getText = $dbh->prepare("SELECT `$language` FROM text WHERE Page_Section = ? ORDER BY line_number");
$getText->execute('Section_Name');
while($_ = $getText->fetchrow_array){push(@TEXT, $_)};
$getText->finish;
print qq~
<p>$TEXT[0]</p>
<p>$TEXT[1]</p>
<p>$TEXT[2]</p>
~;
这种方法对我来说的问题是,如果我想从数据库中删除其中一行,或者添加几行新行怎么办?它弄乱了整个脚本,它只是从一开始就通过数组“盲目地”递增。在这个例子中,如果我删除了数据库中的第二行并想插入两个新行,我将不得不重写脚本的相关部分,否则它会以错误的顺序打印。
我当然可以通过“绝对”ID 提取每一行文本,但这需要一个单独的“执行”语句和“fetchrow_array”行来处理我想要的每一位文本。
有没有更简洁的方法,比如一次性“拉和打印”方法,我可以抓取单个字段并根据 ID 输出它们?像..(警告 - 伪代码来了)
$query = $dbh->prepare(SELECT 'language' FROM 'text' WHERE 'id' = ?);
print qq~
<p>$query->execute(0)</p>
<p>$query->execute(1)</p>
<p>$query->execute(2)</p>
~;
$query->finish;
你明白了.. ;) 这样的事情可能吗?提前致谢!