以下是经过尝试,测试和证明的检查行是否存在的方法。
(其中一些我自己使用,或者过去使用过)。
编辑: 我在使用
mysqli_query()两次的语法中犯了一个先前的错误。请查阅修订版本。
即:
if (!mysqli_query($con,$query))应该简单地读为
if (!$query)。
- 我为忽略该错误表示歉意。
旁注: 两者
'".$var."'和
'$var'做相同的事情。您可以使用任何一种,两者都是有效的语法。
这是两个已编辑的查询:
$query = mysqli_query($con, "SELECt * FROM emails WHERe email='".$email."'"); if (!$query) { die('Error: ' . mysqli_error($con)); }if(mysqli_num_rows($query) > 0){ echo "email already exists";}else{ // do something}和你的情况:
$query = mysqli_query($dbl, "SELECt * FROM `tblUser` WHERe email='".$email."'"); if (!$query) { die('Error: ' . mysqli_error($dbl)); }if(mysqli_num_rows($query) > 0){ echo "email already exists";}else{ // do something}您还可以将其
mysqli_与准备好的语句方法一起使用:
$query = "SELECt `email` FROM `tblUser` WHERe email=?";if ($stmt = $dbl->prepare($query)){ $stmt->bind_param("s", $email); if($stmt->execute()){ $stmt->store_result(); $email_check= ""; $stmt->bind_result($email_check); $stmt->fetch(); if ($stmt->num_rows == 1){ echo "That Email already exists."; exit; } } }或 带有准备好的语句 的PDO方法 :
<?php$email = $_POST['email'];$mysql_hostname = 'xxx';$mysql_username = 'xxx';$mysql_password = 'xxx';$mysql_dbname = 'xxx';try {$conn= new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname", $mysql_username, $mysql_password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);} catch (PDOException $e) { exit( $e->getMessage() );}// assuming a named submit buttonif(isset($_POST['submit'])) { try { $stmt = $conn->prepare('SELECt `email` FROM `tblUser` WHERe email = ?'); $stmt->bindParam(1, $_POST['email']); $stmt->execute(); while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { } } catch(PDOException $e) { echo 'ERROR: ' . $e->getMessage(); } if($stmt->rowCount() > 0){ echo "The record exists!"; } else { echo "The record is non-existant."; } }?>- 最好使用预处理语句来帮助防止SQL注入。
注意:
当按上面使用/概述的方式处理表单和POST数组时,请确保POST数组包含值,该表单使用POST方法,并且输入要匹配命名属性。
- 仅供参考:如果未明确指示,则窗体默认为GET方法。
注意:
<input type = "text" name = "var">-
$_POST['var']匹配。
$_POST['Var']没有匹配。
- POST数组区分大小写。
请教:
- http://php.net/manual/zh/tutorial.forms.php
错误检查参考:
- http://php.net/manual/en/function.error-reporting.php
- http://php.net/manual/zh/mysqli.error.php
- http://php.net/manual/zh/pdo.error-handling.php
请注意,如果您正在访问此问答,并且正在使用
mysql_进行连接(并进行查询),MySQL API不会混在一起。
- 从连接到查询,您必须使用同一地址。
请咨询以下内容:
- 我可以在PHP中混合使用MySQL API吗?
如果您使用的是
mysql_API,但别无选择,请在堆栈上咨询以下问答:
- MySQL PHP:检查行是否存在
该
mysql_*功能已弃用,并将从以后的PHP版本中删除。
- 现在是踏入21世纪的时候了。
您还可以向(a)行添加UNIQUE约束。
参考文献:
- http://dev.mysql.com/doc/refman/5.7/en/constraint-primary-key.html
- http://dev.mysql.com/doc/refman/5.7/en/alter-table.html
- 如何检查值是否已经存在以避免重复?
- 如何将唯一键添加到现有表(具有非唯一行)



