我是一个PHP新手,我正在尝试将facebook用户ID和名称写入mysql数据库。我已经工作了好几天,但我不能写在数据库上!
这是代码:
<?php
include("facebook_constants.php");
$user = $facebook->getUser();
if ($user) {
try {
$user_profile = $facebook->api('/me');
$pdo = new PDO("mysql:host=localhost;dbname=main", 'root', 'password');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$check = $pdo->prepare("SELECT COUNT(id) FROM test WHERE user_id = :userid");
$check->bindParam(':userid',$user_profile["id"], PDO::PARAM_INT);
$check->execute();
$count = $check->rowCount();
if (!is_null($count)) {
header('Location: final.php');
} else {
$insert = $pdo->prepare('INSERT INTO test (name, user_id) VALUES (:name,:userid)');
$insert->bindParam(':userid',$user_profile["id"]);
$insert->bindParam(':name',$user_profile["name"]);
$insert->execute();
header('Location: final.php');
}
} catch (FacebookApiException $e) {
$user = null;
}
}
?>
顺便说一句,我试着注释掉标题('Location:final.php')并注意到$ count变量始终为NOT NULL。但是当我检查数据库时,它是空的。
请原谅我的蹩脚编码。 =(非常感谢!
编辑:
我已经成功了! (实际上我的高中任务)。看起来我只是在if条件下使用了错误的比较。非常感谢你的线索! ^ _ ^ 我真的不太了解,但如果($ check-&gt; fetchColumn()== 0){
再次感谢!
答案 0 :(得分:0)
在$insert
变量中准备好的查询将被查询字符串覆盖。所以bindParam()
等只是不起作用
我在谈论这些问题:
$insert = $pdo->prepare('INSERT INTO test (name, user_id) VALUES (:name,:userid)');
$insert = "INSERT INTO test ('name', 'user_id') VALUES (:name, :userid)";
答案 1 :(得分:0)
我敢打赌你的问题在这里:
$insert = $pdo->prepare('INSERT INTO test (name, user_id) VALUES (:name,:userid)');
$insert = "INSERT INTO test ('name', 'user_id') VALUES (:name, :userid)";
$insert->bindParam(':userid',$user_profile["id"]);
$insert->bindParam(':name',$user_profile["name"]);
$insert->execute();
它应该是这样的:
$insert = $pdo->prepare('INSERT INTO test (name, user_id) VALUES (:name,:userid)');
// $insert is an object above ^^ but you are overwriting with text here.
// $insert = "INSERT INTO test ('name', 'user_id') VALUES (:name, :userid)";
$insert->bindParam(':userid',$user_profile["id"]);
$insert->bindParam(':name',$user_profile["name"]);
$insert->execute();