php - 是否可以仅使用一个 sql 来执行此操作?

标签 php mysql sql

我想要一个插入查询,但在插入之前我检查用户名和电子邮件是否被其他人使用。如果使用,我想取消插入查询并回显一条消息,说明用户名或电子邮件是否正在使用中。

这是我的代码:

$sql = "SELECT 1 FROM user WHERE username='".$_POST['username']."'";
if(!$result = mysql_query($sql))
    die(mysql_error());
while($row = mysql_fetch_array($result))
    die('This username is already exists');
$sql = "SELECT 2 FROM user WHERE email='".$_POST['email']."'";
if(!$result = mysql_query($sql))
    die(mysql_error());
while($row = mysql_fetch_array($result))
    die('This email address is already exists');
$sql = "insert into user (username,email,password,tel,type) values ('".$_POST['username']."','".$_POST['email']."','".$_POST['password']."','".$_POST['telnumber']."','member')";
if(!mysql_query($sql))
    die(mysql_error());

我想将这三个 sql 语句合二为一。它可以是使用案例或您建议的其他内容。所以, 是否可以将此代码压缩到一个 sql 查询中?

结果我需要的是

sql = "sql_query"
if(!$result = mysql_query($sql))
    die(mysql_error());
while($row = mysql_fetch_array($result)){
if($row['result']==1)
    die('This username is already exists');
else if($row['result']==2)
    die('This email is already exists');
}
die('you have succesfully registered');

感谢您的任何建议。

最佳答案

虽然我建议您遵循@cularis 的回答,但您可能对以下备选方案感兴趣:

  1. emailusername 提供 UNIQUE 约束,为这两者创建一个唯一索引。
  2. 运行您的INSERT 查询,如果失败...(由于重复键)
  3. 运行建议的组合 SELECT,以确定存在哪个字段(用户名或电子邮件)

关于php - 是否可以仅使用一个 sql 来执行此操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6722863/

相关文章:

通过python脚本进行Php质因数分解

php - 在线编译c/c++ [安全问题]

php - footer.php 中的标签</html> 是针对哪个<html> 标签关闭的?

php - 为什么我收到 typeError value is null 但在我的 firebug 中我可以看到有这些值而不是 null?

php - 如何避免对现有代码进行 SQL 注入(inject)

mysql - Django - 操作错误 : (1054, "Unknown column ' xx' 在 'field list' 中“)

SQL Server : subscription : how to know if a table is under replication/subscription

php - ORM for mysql now() - Laravel 4

mysql - 查找 SQL 查询中的最后一条记录

sql - 表示数据库中的时间表