Php 通过不带循环的数组从MySQL获取值

Php 通过不带循环的数组从MySQL获取值,php,mysql,sql,arrays,Php,Mysql,Sql,Arrays,我试图通过两个数组从网站上的数据库中获取价值。我真的不知道怎么做,也找不到我的问题的好答案 所以,我想用3种语言制作一个多语言网页。我创建了一个数据库,其中包含wordid、word、en、de、ru,我想用其中一种语言逐字获取值 这是我的桌子: WORDID WORD EN DE RU 1 admin_hello Hello Hallo Privet 我想得到一个像$lang['admin_hello']['de']这样

我试图通过两个数组从网站上的数据库中获取价值。我真的不知道怎么做,也找不到我的问题的好答案

所以,我想用3种语言制作一个多语言网页。我创建了一个数据库,其中包含
wordid
word
en
de
ru
,我想用其中一种语言逐字获取值

这是我的桌子:

WORDID     WORD          EN      DE      RU
1          admin_hello   Hello  Hallo  Privet
我想得到一个像$lang['admin_hello']['de']这样的值,没有循环

PHP:

是的,它使用while,但它不工作。我怎样才能得到像
$lang['admin\u hello']['en']
这样没有循环的值,因为对于每一行,它都会打印一个值,所以我希望它没有循环,可以翻译整个页面

知道吗,我怎么能做到


谢谢。

我会尽快解决这个问题:您应该立即停止使用mysql_*函数,改用mysqli或PDO。在PHP7中,mysql_*函数已被完全删除。其次,这种事情不能没有一个循环。PHP只能将MySQL行映射到一维数组。您可能可以为pivot表或其他内容挖掘一个库,但您也可以自己编写这样简单的内容

话虽如此,您的代码似乎并不能满足您的需要。
admin\u hello
数组键必须对应于您未选择的
admin\u hello

如果您试图将整个
翻译
表映射到一个数组,该数组以
单词
(或
单词id
)作为第一个键,语言(en/de/ru)作为第二个键,则可以在循环中构建该数组。我将保持mysql_*函数不变,以便更容易看到发生了什么,但请努力为mysqli或PDO重构代码

// Load the words
$words = array();
$language_whitelist = array('en', 'de', 'ru')
$translation = "SELECT word_id, word, en, ru, de FROM translation";
$translation_result = mysql_query($translation);

if (mysql_num_rows($translation_result)) {
    while ($row = mysql_fetch_assoc($translation_result)) {
        foreach ($language_whitelist as $language) {
            $words[$row['word_id']][$language] = $row[$language];
        }
    }
}

// Display all the words as a demo
foreach ($words AS $word) {
    print_r($word);
}

// Or, get a specific word
print $words['admin_hello']['ru'];
或者,如果您只想按需调用单词,可以直接将其写入查询中。下面是一个您可能使用的示例函数。同样,我使用过时且不安全的mysql_*函数来让事情变得易懂。不要按原样使用此代码。使用准备好的语句来针对SQL注入清理查询(例如,想象一下,如果您试图翻译“you's”这个词)


感谢您花时间提供有关针对SQL注入的安全性的有用信息,当然也感谢您回答我的问题。工作正常,所以我将学习PDO ar mysqli。
// Load the words
$words = array();
$language_whitelist = array('en', 'de', 'ru')
$translation = "SELECT word_id, word, en, ru, de FROM translation";
$translation_result = mysql_query($translation);

if (mysql_num_rows($translation_result)) {
    while ($row = mysql_fetch_assoc($translation_result)) {
        foreach ($language_whitelist as $language) {
            $words[$row['word_id']][$language] = $row[$language];
        }
    }
}

// Display all the words as a demo
foreach ($words AS $word) {
    print_r($word);
}

// Or, get a specific word
print $words['admin_hello']['ru'];
function translate ($word, $language)
{
    $sql = "SELECT {$language} FROM translation WHERE word='{$word}'";
    $result = mysql_query($sql);

    if (mysql_num_rows($result)) {
        $row = mysql_fetch_assoc($result);
        return $row[0];
    }
    else { 
        // Return the original word if no result is found
        return $word;
    }
}

// And a demo (assuming you have a translation for "Hello World"):
print "This is how you say 'Hello World' in Russian: " . translate("Hello World", "ru");