【问题标题】:Check if mysql user exists [closed]检查mysql用户是否存在[关闭]
【发布时间】:2014-12-08 01:57:08
【问题描述】:
$check="SELECT * FROM users WHERE name = '$_POST[name]'";
$rs = mysqli_query($conn,$check);
$data = mysqli_fetch_array($rs, MYSQLI_NUM);
if($data[0] > 1) {
    echo "User Already in Exists<br/>";
}else
    echo "User does Not exist";

这是正确的方法吗?它说无论如何用户都不存在;我知道数据库中有一个名为“test”的用户。

【问题讨论】:

  • if(mysqli_num_rows($rs) > 0) { echo "用户存在; }
  • ... 甚至SELECT COUNT(*) ...
  • ... 甚至SELECT 1
  • @Phil:它不像COUNT(*)那样语义化
  • 我想这个问题可以被关闭为“主要基于意见”;)有很多方法可以做到这一点。

标签: php mysql mysqli


【解决方案1】:
// this line makes mysqli throw exceptions so you'll never have to check
// return values for false
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

// prepare a statement checking for existence
$stmt = $conn->prepare('SELECT 1 FROM users WHERE name = ?');

// bind the POST param to the parameter
$stmt->bind_param('s', $_POST['name']);
$stmt->execute();

// if there are any rows, that means the name exists
if ($stmt->fetch()) {
    echo 'User "', htmlspecialchars($_POST['name']), '" already exists<br/>';
} else {
    echo 'User "', htmlspecialchars($_POST['name']), '" does not exist<br/>';
}

【讨论】:

  • 有效!但为什么我的做法不对呢?
  • @HuangLee 我的猜测是您无法知道结果集的位置 0 中的哪一列,因为您使用的是 SELECT * 以及与 @ 相比它是什么987654323@,正在评估为false
  • @HuangLee 另外,您的原始代码容易受到 SQL 注入的影响。使用带有绑定参数的准备好的语句可以避免这个问题
猜你喜欢
  • 1970-01-01
  • 2015-03-09
  • 2014-11-29
  • 2023-03-22
  • 2015-12-04
  • 1970-01-01
  • 2012-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多