(是的,标题应该更容易理解,但老实说我不知道如何设置它。)
我要做的是创建一个拉丁语的在线词典。当你搜索一个单词代码(我使用一些索引,所以不要担心选择性)将在一个字符串内逐行搜索该名称(该字符串使用 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';
}
第一个代码完美无缺,但第二个代码并不是完全相同的。我只是不明白为什么。
答案 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))