【问题标题】:Problem Checking a Unique Indentity within MySQL Database在 MySQL 数据库中检查唯一身份的问题
【发布时间】:2011-06-18 03:05:08
【问题描述】:

我正在尝试验证字符串在 MySQL 列中是否唯一。这是代码示例:

<?php
$con = mysql_connect("hostname", "username", "password");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("table_name", $con);


if (!mysql_num_rows(mysql_query("SELECT * FROM table_name WHERE unique_string = '123456' 
LIMIT 1"))) {

die('This string is not unique.');
}
mysql_close($con);
?>

在此代码示例中,我输入了值 123456 作为示例。此示例假定字符串 123456 已存在于列 unique_string 中。因此,它应该死掉并返回“这个字符串不是唯一的”语句。可悲的是,事实并非如此。你知道为什么吗?有没有更好的方法来完成这项检查?

【问题讨论】:

    标签: php mysql string unique identifier


    【解决方案1】:

    按照你的方式链接你的函数调用通常是不明智的。特别是数据库调用。 mysql_*() 函数期望某些东西被传入,比如语句句柄。但是如果出现问题,它们可以返回布尔值 FALSE 而不是句柄。这个 FALSE 被传入而不是句柄,然后一切都被破坏了。

    一般规则是始终假设您的查询会以某种方式失败,并进行防御性编程:

    $sql = "SELECT ....";
    $result = mysql_query($sql) or die(mysql_error());
    $rows = mysql_num_rows($result);
    if ($row !== 0) then
        die("Not unique");
    }
    

    除此之外,您的查询语句看起来在语法上是正确的。为什么不看看它返回了什么?

    $row = mysql_fetch_assoc($result);
    var_dump($row);
    

    并准确查看匹配的内容。也许您在表格中没有该值,并且错误地认为它在那里。

    【讨论】:

      【解决方案2】:
      Select count(*) from yourtable where mycolumn = 'unique string'
      

      您现在应该测试这是否返回 1

      【讨论】:

        【解决方案3】:

        您也将“table_name”用于数据库。它是否正确?如果没有,mysql_select_db() 会失败,任何查询也会失败,因为没有选择数据库。

        【讨论】:

        • 是的,这是我的编辑错误。我做了 mysql_select_db("db_name", $con);
        猜你喜欢
        • 1970-01-01
        • 2013-04-02
        • 1970-01-01
        • 1970-01-01
        • 2011-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-19
        相关资源
        最近更新 更多