将 SQL 数据库中的字符串与“普通”字符串进行比较


Comparing string in SQL database with "normal" string

我正在尝试制作带有下拉菜单的表单。然后将表单的值存储在数据库中。我希望以后能够更改表单的值,并通过返回到表单来执行此操作,该表单填充了在数据库中输入的值。

一切似乎都在工作,除了下拉菜单。由于我希望所有字段都填充正确的值,因此菜单也是如此。因此,我尝试在 if-else 子句中使用字符串比较来确定要设置为选定的选项。但是字符串比较不起作用。下面是一个代码示例:

$query = mysql_query(SELECT * FROM data);
$result = mysql_fetch_assoc($query);
if(strcmp($result['pet'],"Dog")==0)
{
    echo "
        <option value='Dog' selected>Dog</option>
        <option value='Cat'>Cat</option>
        <option value='Bird'>Bird</option>
    ";
}
elseif(strcmp($result['pet'],"Cat")==0)
{
    echo "
        <option value='Dog'>Dog</option>
        <option value='Cat' selected>Cat</option>
        <option value='Bird'>Bird</option>
    ";
}

我也试过:

if(result['pet']=="Dog")
{
    .....
}
elseif(result['pet']=="Cat")
{
    .....
}

if(strcmp(trim(reuslt['pet']),trim("Dog"))==0)
{
    .....
}
elseif(strcmp(trim(result['pet']),trim("Cat"))==0)
{
    .....
}

但没有任何效果。我怀疑这与排序规则有关,所以我在选择值时尝试更改它:

$query = mysql_query("SELECT * COLLATE latin_1 FROM data");
$result = mysql_fetch_assoc($query);

这给了我错误消息"警告:mysql_fetch_assoc() 期望参数 1 是资源,在第 12 行的/opt/lampp/htdocs/PHP/control.php 中给出布尔值"。

那么,出了什么问题,我该如何解决呢?

编辑:我现在稍微改变了我的查询:

$query = mysql_query("SELECT * FROM data WHERE user='$user' COLLATE uft8_general_ci") or die(mysql_error());

由此我得到以下错误:

归类"utf8_general_ci"对字符集"拉丁1"无效

当我将排序规则更改为latin1_general_ci时,我以下内容:

操作"="的排序规则(utf8_swedish_ci,隐式)和(latin1_general_ci,显式)的非法混合

如果有帮助,我用于数据库中列的排序规则是utf8_swedish_ci的。

您收到此错误是因为mysql_query查询失败时返回布尔值 (false),请执行以下操作以更好地解释问题

$result = mysql_query('SELECT * COLLATION latin_1 FROM data');
if (!$result) {
    die('Invalid query: ' . mysql_error());
}

问题是您的查询无效 - 您应该使用COLLATE而不是COLLATION...有关COLLATE如何工作的良好解释,请参阅以下内容 - 本质上您对单个列而不是组使用 COLLATE*