php - 将 SQL 数据库中的字符串与 "normal"字符串进行比较

标签 php mysql string-comparison strcmp

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

除了下拉菜单之外,一切似乎都正常。由于我希望所有字段都填写正确的值,因此菜单也如此。因此,我尝试在 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 为资源, bool 值在第 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”对于字符集“latin1”无效

当我将排序规则更改为 latin1_general_ci 时,我将执行以下操作:

操作“=”时非法混合排序规则 (utf8_swedish_ci,IMPLICIT) 和 (latin1_general_ci,EXPLICIT)

我在数据库中使用的列排序规则是 utf8_swedish_ci(如果有帮助的话)。

最佳答案

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

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

问题是您的查询无效 - 您应该使用 COLLATE 而不是 COLLATION ...有关如何 COLLATE works 的详细说明,请参阅以下内容- 本质上,您对单个列而不是组使用 COLLATE (*)

关于php - 将 SQL 数据库中的字符串与 "normal"字符串进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11098242/

相关文章:

javascript - 隐藏和显示 div 单击 a

java - 正确设置mysql排序规则

php - session 不是真的被破坏了吗?

objective-c - 获取两个 NSString 之间的差异

PHP:filter_var 清理是否足够安全?

php - 为我的本地 Web 应用程序尝试访问 google.com 时出错

php - 列出两个单独表中 ID 匹配的记录

php - 错误; #1071 - 指定的 key 太长;最大 key 长度为 1000 字节

c++ - string1 == string2和您自己的for循环比较之间有什么区别?

php - 为什么在 PHP 中对日期格式为 "YYYY-MM-DD"的两个字符串进行小于或大于比较工作,即使它们是字符串?