PHP脚本。检查用户是否已经在MySQL数据库中
我正在为Facebook创建应用程序,所有使用该应用程序的用户都会写入数据库。所以,我需要经常检查用户是否已经在数据库中,如何正确地做到这一点 所以我有变量$name=$user_profile['name'];它获取用户名 这是我将用户插入数据库的函数PHP脚本。检查用户是否已经在MySQL数据库中,php,mysql,database,facebook,select,Php,Mysql,Database,Facebook,Select,我正在为Facebook创建应用程序,所有使用该应用程序的用户都会写入数据库。所以,我需要经常检查用户是否已经在数据库中,如何正确地做到这一点 所以我有变量$name=$user_profile['name'];它获取用户名 这是我将用户插入数据库的函数 $mysqli = new mysqli("asd","asd","pw","asd"); if ($stmt = $mysqli->prepare("INSERT into myTable (score, userName) V
$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函数来检查用户是否已经在数据库中。据我所知,它应该类似于插入到数据库,只是插入到我需要使用选择从只是如何成功地做到这一点?多谢各位
我读过这篇文章:但它对我没有帮助
更新
现在,我的代码如下所示:
$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";
}
它打印12345。这意味着这一行$results=$stmt->get\u result;是不正确的,因为它之后没有打印值。这里有什么问题?这个查询很简单:
SELECT
COUNT(*)
FROM
myTable
WHERE
userName = :user_name
如果结果不是0,则用户存在
mysqli在php中的实现
1如果您写入FB用户数据,则不应检查名称!您应该检查FB用户ID-它总是唯一的,并且名称可以相同
2永不计数*-改用COUNTid您不应该使用FB用户名毕竟,用户可以更改它,但FB用户id。@CBroe感谢您的回答,在这种情况下,我需要使用用户名,而不是FB用户id,但感谢您的回答。感谢您的回答,但我误解了我的PHP脚本现在的样子$query=从myTable中选择COUNT*,其中userName=:user_name,if$query==0{…}else{…}?@RimantėBaltiejūtė查看更新的答案。我希望,当我给你SQL时,你会自己编写php代码;再次感谢您的回答,但仍然不起作用,我用代码更新了我的代码,使其看起来像现在的样子。@RimantėBaltiejūtė你说不起作用是什么意思?你会犯什么错误?你试过调试吗?调试后我没有收到任何错误。我会尽力解释的。在Facebook窗口是Flash游戏,我正在尝试你的代码在游戏顶部使用,所以我看到白色窗口游戏并没有出现,但调试显示成功并没有错误。如果我将此计数*更改为例如COUNTadasda,我会得到错误:屏幕上没有显示字段adasda和游戏。这意味着这个计数*行有问题。谢谢你们的回答,但现在我需要使用用户名,在这种情况下不能使用ID。我的例子仍然无法使用COUNTid,没有发生任何事情我添加了检查这里是否有错误,我得到了1:错误:“字段列表”中的未知列“id”,当我使用*而不是id COUNT*作为num时,我获得了成功,没有错误,但仍然不起作用。我认为这里的某个地方有错误,因为它成功地连接到数据库:results=$stmt->get\u result$data=mysqli\u fetch\u assoc$results;如果$data['num']!=0{echo good;$apiResponse=$facebook->api'/me/feed',POST',$POST_data;}否则{echo bad;$apiResponse=$facebook->api'/me/feed',POST',$POST_data;}如果用户在数据库中,我会尝试以两种方式发布数据,如果用户不在数据库中,但它无论如何都不起作用。在查询后打印$data的值,这样您就知道问题出在哪里了。若$data返回正常值,那个么试着在你们的facebook API中查找错误。你需要一步一步地调试它,否则你会花太多的时间在工作正常的事情上,但不会注意到问题出在哪里。检查$mysqli->prepare$sql返回的内容。看来你的“如果布拉布拉”不起作用了。
$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";
}
}