【问题标题】:PHP Script. Check If user already is in MySQL databasePHP 脚本。检查用户是否已经在 MySQL 数据库中
【发布时间】:2013-12-11 14:56:14
【问题描述】:

我正在为 Facebook 创建应用程序,所有使用该应用程序的用户都被写入数据库。所以我需要经常检查如果用户已经在数据库中,如何正确地做到这一点?

所以我有变量 $name = $user_profile['name']; 它获取用户名

这是我将用户插入数据库的功能。

    $mysqli = new mysqli("asd","asd","pw","asd");
if ($stmt = $mysqli->prepare("INSERT into myTable (score, userName) VALUE (?,?) ")) {
if (!$mysqli->set_charset("utf8")) {
    printf("Error loading character set utf8: %s\n", $mysqli->error);
} else {

}
$stmt->bind_param('ss', $score, $name);
   $stmt->execute();
   if ($stmt->error != '') {
       echo ' error:'.$stmt->error;
   } else {
       echo 'success';
   }
   $stmt->close();
} else {
   echo 'error:'.$mysqli->error;
}
$mysqli->close();

现在我需要If 函数来检查用户是否已经在数据库中。据我了解它应该与插入数据库类似,只是INSERT into 我需要使用SELECT from 只是如何成功地做到这一点?谢谢你。

我读过这个:Best way to check for existing user in mySQL database? 但它对我没有帮助。

更新

现在我的代码如下所示:

   $mysqli = new mysqli("host","asd","pw","asdf");
   echo "1";
 $sql = "SELECT COUNT(*) AS num FROM myTable WHERE userName = ?";
    echo "2";
 if ($stmt = $mysqli->prepare("SELECT COUNT(*) AS num FROM under WHERE userName = ? ")) {
    echo "3";
    $stmt->bind_param('s', $name);
       echo "4";
    $stmt->execute();
       echo "5";
    $results = $stmt->get_result();
       echo "6";
    $data = mysqli_fetch_assoc($results);
       echo "7";
    }

它打印 1 2 3 4 5。这意味着这条线 $results = $stmt->get_result(); 不正确,因为它没有打印值。这里有什么问题?

【问题讨论】:

  • 你不应该使用FB用户名(毕竟用户可以更改它),而是FB用户ID。
  • @CBroe 感谢您的回答,在这种情况下,我需要使用用户名,而不是 FB 用户 ID,但感谢您的回答。

标签: php mysql database facebook select


【解决方案1】:

这个查询很简单:

SELECT
    COUNT(*)
FROM
    myTable
WHERE
    userName = :user_name

如果结果不为0,则用户存在。

mysqli在php中的实现

$sql = "SELECT
    COUNT(*) AS num
FROM
    myTable
WHERE
    userName = ?";

if ($stmt = $mysqli->prepare($sql)) {
    $stmt->bind_param('s', $name);
    $stmt->execute();
    $results = $stmt->get_result();
    $data = mysqli_fetch_assoc($results);
    if($data['num'] != 0)
    {
        print "user already exists\n";
    }
}

【讨论】:

  • 感谢您的回答,但我误解了我的 PHP 脚本现在应该是什么样子? $query = (SELECT COUNT(*) FROM myTable WHERE userName = :user_nameif ($query == 0) { .... } else { ... }?
  • @RimantėBaltiejūtė 查看更新后的答案。我希望,当我给你 SQL 时,你会自己编写 php 代码;)
  • 再次感谢您的回答,但仍然无法正常工作,我用现在的代码更新了我的代码。
  • @RimantėBaltiejūtė “不工作”是什么意思?你得到什么错误?你试过调试吗?
  • 调试后我没有收到任何错误。我会尽力解释。在 Facebook 窗口中是 Flash 游戏,我正在尝试在游戏顶部使用您的代码,所以我看到白色窗口(游戏不出现),但调试显示“成功”没有错误。如果我将这个COUNT(*) 更改为例如COUNT(adasda) 我得到错误:“没有字段“adasda””并且游戏出现在屏幕上。所以这意味着COUNT(*) 行有问题。
【解决方案2】:

1) 如果你写FB用户数据,你不应该检查NAME!您应该检查 FB 用户 ID - 它始终是唯一的,并且名称可以相同。

2) 永远不要使用COUNT(*) - 改用COUNT(id)

【讨论】:

  • 谢谢你的回答,但现在我需要使用用户名,在这种情况下不能使用ID。我的示例仍然无法使用 COUNT(id),没有任何反应
  • 我添加了检查如果这里有错误,我得到了 1:error:Unknown column 'id' in 'field list'
  • 当我使用 * 代替 id COUNT(*) AS num 时,我成功了,没有错误,但仍然无法正常工作。
  • 我认为这里的某个地方是错误的,因为它成功连接到数据库:results = $stmt->get_result(); $data = mysqli_fetch_assoc($results); if($data['num'] != 0) { echo "good"; $apiResponse = $facebook->api('/me/feed', 'POST', $post_data); } else { echo "bad"; $apiResponse = $facebook->api('/me/feed', 'POST', $post_data); } 我正在尝试以两种方式发布数据如果用户在数据库中,如果没有,但它无论如何都不起作用。
  • 查询后打印 $data 的值,然后你就会明白问题出在哪里了。如果 $data 返回正常,则尝试在您的 facebook API 中查找错误。你需要一步步调试它,否则你会花太多时间在可以正常工作的事情上,但不会注意到问题出在哪里。检查您的 $mysqli->prepare($sql) 返回的内容。看来您的if (bla-bla) 不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-26
  • 2015-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多