如何使用PHP来避免数据库上的重复?

时间:2016-07-31 08:55:25

标签: php sql mysqli

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

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

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

1 个答案:

答案 0 :(得分: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的结果,但它不是字符串。显示DB结果的步骤如下:

  1. 运行查询(你做了)
  2. 通过检查结果不是false
  3. 来验证没有错误
  4. 通过在结果上执行fetch fetch_assocfetch_array或某种此类方法来获取结果
  5. 使用或显示您提取的内容。

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