【问题标题】:How to use php to avoid duplication on database? [duplicate]如何使用php避免数据库重复? [复制]
【发布时间】:2016-07-31 08:55:25
【问题描述】:

我想在我的表中创建一个唯一值列,并使用 php 检查该值是否已经插入到表中。例如,一个用户名不能使用两次。 我尝试使用 SELECT 从数据库中获取值,但它不起作用。 当我尝试像这样从表中回显值时:

echo $conn->query("SELECT DISTINCT Username
FROM UserDetail;");

它说: 可捕获的致命错误:类 mysqli_result 的对象无法转换为字符串

【问题讨论】:

    标签: php sql mysqli


    【解决方案1】:

    这个问题不应该在 PHP 中解决,因为它是一个数据库设计问题。相反,您想更改您的 UserDetail 表,以便数据库将拒绝任何尝试插入重复项的查询。这是您运行的查询:

    $sql = 'ALTER TABLE UserDetail ADD UNIQUE INDEX (`Username`)';
    $result = $conn->query($sql);
    
    if($result) echo 'Success!';
    else echo $conn->error;
    

    成功完成此操作后,将无法在此表中输入重复的Username 值;查询不会执行,会产生错误。

    现在为避免脚本尝试插入已存在的用户名时出错,请将插入查询从 INSERT 更改为 INSERT IGNORE

    $sql = "INSERT IGNORE INTO UserDetail SET Username='$escaped_new_username'";
    $result = $conn->query($sql);
    

    顺便说一句,您的代码失败是因为您试图回显$conn->query 的结果,但它不是字符串。显示数据库结果的步骤是:

    1. 运行查询(你做了)

    2. 通过检查结果不是false来验证没有错误

    3. 通过对结果执行fetchfetch_assocfetch_array或类似方法来获取结果

    4. 使用或展示您获取的内容。

      查看您正在使用的数据库驱动程序的文档。最常见的是MySQLiPDO_MySQL

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-09
      • 1970-01-01
      • 2015-09-11
      • 2017-07-10
      • 1970-01-01
      • 2019-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多