gpt4 book ai didi

php - 如何检查MySQL中是否存在行? (即检查用户名或电子邮件是否存在于 MySQL 中)

转载 作者:IT老高 更新时间:2023-10-28 23:42:22 25 4
gpt4 key购买 nike

我需要帮助检查数据库中是否存在行。就我而言,该行包含一个电子邮件地址。我得到了结果:

email no longer exists publisher@example.com

这是我目前使用的代码:

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 中是否存在电子邮件)?

最佳答案

以下是检查行是否存在的经过尝试、测试和验证的方法。

(其中一些我自己用过,或者过去用过)。

编辑:我在使用 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方法:

$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 :

<?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.";
}


}
?>
  • 准备好的语句最好用于帮助防止 SQL 注入(inject)。

注意:

在处理上面使用/概述的表单和 POST 数组时,请确保 POST 数组包含值,POST 方法用于表单并匹配输入的命名属性。

  • 仅供引用:如果没有明确指示,表单默认为 GET 方法。

注意:<input type = "text" name = "var"> - $_POST['var']匹配。 $_POST['Var']没有匹配。

  • POST 数组区分大小写。

咨询:

错误检查引用:

请注意 MySQL API 不会混合使用,以防您访问此问答并使用 mysql_连接(和查询)。

  • 从连接到查询必须使用同一个。

请咨询以下内容:

如果您使用的是 mysql_ API 并且没有选择使用它,然后在 Stack 上查阅以下 Q&A:

mysql_*函数已被弃用,并将从 future 的 PHP 版本中删除。

  • 是时候迈入 21 世纪了。

您还可以向 (a) 行添加 UNIQUE 约束。

引用资料:

关于php - 如何检查MySQL中是否存在行? (即检查用户名或电子邮件是否存在于 MySQL 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22252904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com