我正在尝试使用以下代码(大部分来自:Best way to test if a row exists in a MySQL table)将用户的inpout从html表单实施数据重复检查,然后将其插入到mysql DB中:
$serialNo = $_POST['serialNo'];
$sqldupe = "SELECT EXISTS(SELECT 1 FROM eqpt WHERE serial = '$serialNo')";
if (mysqli_query($dbcon, $sqldupe)) {
die('RECORD already exists');
}
但即使我尝试输入数据库表eqpt中不存在的$ serialNo,我仍然会收到错误消息。
我确实在表中使用UNIQUE选项保护了serialNo列,以防止重复输入。因此,这种欺骗检查更多的是为用户提供一个线索,告诉他们如果输入的serialNo已经在数据库中,他们的尝试插入被拒绝的原因。
我想我已经掌握了这个片段,但承认因为我已经十多年没有触及sql / php了,我需要让RTM摆脱一些生锈。但如果有一个快速/明显的解决方案,我肯定会感谢你的帮助。
答案 0 :(得分:3)
对于mysqli_query函数,返回值为true,因为"成功的SELECT,SHOW,DESCRIBE或EXPLAIN查询它将返回一个mysqli_result对象。对于其他成功的查询,它将返回TRUE。失败时错误"
您的SQL将始终成功,因为如果存在则返回1,否则返回0。如果不存在,则删除存在将不返回任何结果,如果您确实意味着其余代码将起作用,则不会返回结果。
解决方案:
$serialNo = $_POST['serialNo'];
$result = mysqli_query("SELECT EXISTS(SELECT 1 FROM eqpt WHERE serial = '$serialNo') AS found");
$value = $result->fetch_object();
if ($value->found) {
die('RECORD already exists');
}
答案 1 :(得分:1)
你可以试试这个
$serialNo = $_POST['serialNo'];
$sqldupe = "SELECT serial FROM eqpt WHERE serial = '$serialNo'";
if (mysql_num_rows(mysql_query($dbcon, $sqldupe)) > 0) {
die('RECORD already exists');
}