相同的代码不同地从数据库加载数据和使用本地数据

时间:2017-04-26 14:00:55

标签: php mysql strcmp

(是的,标题应该更容易理解,但老实说我不知道​​如何设置它。)

我要做的是创建一个拉丁语的在线词典。当你搜索一个单词代码(我使用一些索引,所以不要担心选择性)将在一个字符串内逐行搜索该名称(该字符串使用 explode 成为一个数组)。

我创建了一个名为'test'的表,只是为了练习这段代码,但它的工作方式与字典相同:here the table

在尝试从数据库加载数据之前,我已经检查过它是否在本地运行。它在本地工作。代码如下:

$word_searched = 'puellam';

$string_declination = ('puella,puellae,puellae,puellam,puella,puella');
$array_declination = explode(",", $string_declination);

$check = 0;

foreach ($array_declinazion as $item) {
    if ( (strcmp($item, $word_searched)) === 0 ){
        $check++;
    }
}   

if ( $check > 0) {
    echo 'yes';
}

然后我尝试使用相同的代码从数据库(表'test')加载数据。代码如下:

$query =  "SELECT * FROM test";

$result = mysqli_query($conn, $query) or die('Error running query!');

$check = 0;
$string = 'puellam';

while($row = $result->fetch_assoc()) { 
    $array_declinazione = explode(",", $row['declinazione']);
    foreach ($array_declinazione as $item) {
        if ( (strcmp($item, $string)) === 0 ){
            $check++;
        }
    }
}


if ( $check > 0) {
    echo 'yes';
}

第一个代码完美无缺,但第二个代码并不是完全相同的。我只是不明白为什么。

2 个答案:

答案 0 :(得分:0)

我认为你需要的第二个是:

$string = 'puellam';
// If there is a word that matches $string it will return the row
$query =  "SELECT * FROM test WHERE declinazione LIKE '%$string%'"; // demonstration purposes only. THIS IS VERY UNSAFE!!!! DO NOT USE IN PRODUCTION!!!!

$result = mysqli_query($conn, $query;

if ( $result ) {
    $check = mysqli_num_rows($result);

    if ( $check > 0) {
        echo 'yes';
    }
} else {
    die('Error running query! ' . mysqli_error($conn); // Throw errors if any - It's best to log it instead of "echoing" it
}

答案 1 :(得分:0)

数据库中的行包含空格,而字符串则不包含空格。您可能希望在两个字符串上调用trim以在比较之前删除前导/尾随空格。

例如,将strcmp更改为

strcmp(trim($item), trim($string))