PDO不会写入MySQL

时间:2013-12-06 13:47:10

标签: php mysql pdo

我是一个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){

再次感谢!

2 个答案:

答案 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();