[英]How to check whether a mysql select statement result has a value or not in php?
[英]Check whether a field has the property `UNIQUE` in mysql and PHP
如何检查表中的字段是否设置为UNIQUE ?
例如,我有一个名为users
的表,其中字段email
设置为UNIQUE
而字段picture
未设置为UNIQUE
,我想在选择之前检查是否将该字段设置为UNIQUE
否则请不要执行SELECT
。
我试图进行SELECT
然后计算返回的行数,如果大于1,则表示不是UNIQUE
,
"SELECT * FROM table WHERE email='$email'"
//...some mysql php line later
if($count > 1){
//return nothing
}
但效率不高,如果没有重复该怎么办。
检查PHP
是否将字段设置为UNIQUE
的最佳方法是什么?
编辑:没有重复并不意味着它具有UNIQUE
属性
从SHOW INDEX (由@diEcho找到)的文档中 :
SHOW INDEX返回以下字段:
Non_unique-如果索引不能包含重复项,则为0;如果可以,则为1。
Column_name-列名。
尝试:
SHOW INDEXES
FROM $tablename
WHERE Column_name='$field'
AND NOT Non_unique
请注意,这假定不存在跨越多列的UNIQUE索引。 如果可以,那么您可能希望通过子查询排除这些。
另请注意,该查询中还会显示禁用的索引( Comment
列的文档中提到了禁用的索引的可能性)。 似乎没有反映这一点的列,因此如果禁用了索引,则可能需要分析Comment
列。
无需将Non_unique
与数字进行比较- 无论如何,MySQL使用0和1表示布尔值
您可以使用以下命令检查所有索引列
如果有一个UNIQUE索引,则它不能在同一表中重复值,但一个UNIQUE索引允许包含NULL的列具有多个NULL值
在列上创建UNIQUE约束(让电子邮件发送),使用以下查询
ALTER TABLE `table_name` ADD UNIQUE (`email`);
好的,我感谢@diEcho
public function isUniqueField($tablename, $field, $connection){
$query = $connection->query("SHOW INDEXES FROM $tablename WHERE Column_name='$field' AND Non_unique=0");
$query->execute();
if(!$query->fetchAll()){
return false;
}
return true;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.