我需要帮助检查数据库中是否存在行。就我而言,该行包含一个电子邮件地址。我得到结果:
email no longer exists [email protected]
这是我当前正在使用的代码:
if (count($_POST)) {
$email = $dbl->real_escape_string(trim(strip_tags($_POST['email'])));
$query = "SELECT `email` FROM `tblUser` WHERE `email` = '$email'";
$result = mysqli_query($dbl, $query);
if (is_resource($result) && mysqli_num_rows($result) == 1) {
$row = mysqli_fetch_assoc($result);
echo $email . " email exists " . $row["email"] . "\n";
} else {
echo "email no longer exists" . $email . "\n";
}
}
是否有更好的方法来检查MySQL中是否存在行(在我的情况下,请检查MySQL中是否存在电子邮件)?
以下经过尝试,测试和证明的方法来检查是否存在一行。
((其中一些我自己使用或曾经使用)。>>
Edit:
我在语法上犯了一个先前的错误,在此我两次使用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_
with a prepared statement方法:
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; } } }
:
Or a PDO method with a prepared statement
NB。:
当处理上面使用/概述的表单和POST数组时,请确保POST数组包含值,表单使用POST方法并为输入匹配命名属性。
注意:<?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 button
if(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.";
}
}
?>
-<input type = "text" name = "var">
匹配。 $_POST['var']
没有匹配项。
咨询:
$_POST['Var']
错误检查引用:
[请注意,如果您正在访问此问答,并且您正在使用http://php.net/manual/en/pdo.error-handling.php进行连接(并进行查询),则MySQL API不会混用。
请咨询以下内容:
mysql_
如果您正在使用Can I mix MySQL APIs in PHP? API,但别无选择,请查阅以下有关堆栈的Q&A:
mysql_
MySql php: check if Row exists函数已被弃用,并将从以后的PHP版本中删除。
您还可以向(a)行添加UNIQUE约束。
参考:
您必须执行查询并在查询中的$ email中添加单引号,因为它是一个字符串,并删除How add unique key to existing table (with non uniques rows) $ query是一个字符串,$ result将是资源
在验证之后,在插入之前,请使用mysqli(procedural)检查用户名是否已存在。这有效:
有多种方法来检查数据库中是否存在值。让我演示一下如何使用PDO和mysqli正确完成此操作。