PHP / SQL PDO准备/执行插入语句不起作用

时间:2013-04-23 01:18:29

标签: php mysql sql pdo

所以我试图在我的网站上使用PDO对象而不是旧方法(特别是因为我听说它更好,并且我正在更新一堆查询。但由于某种原因,我无法得到无论我做什么,准备/执行工作。

dbconnect.php:

try {
    $main = new PDO("mysql:dbname=$dbmain;host=$dbhost", $dbuser, $dbpassword);
    $tracker = new PDO("mysql:dbname=$dbtracker;host=$dbhost", $dbuser, $dbpassword);
} catch (PDOException $ex) {
    echo "Connection failed: " . $ex->getMessage();
}

tracker.php

include 'dbconnect.php';

$page = $_SERVER['PHP_SELF']; //Get page name
$ip = $_SERVER['REMOTE_ADDR'];   //Get the IP address
$browser = $_SERVER['HTTP_USER_AGENT']; //Get the browser name

if(isset($_SERVER['HTTP_REFERER'])) {
    $referer = $_SERVER['HTTP_REFERER']; //Get the page the visitor came from
}
else { //If not refered from any page, referer should be blank or error occurs
    $referer = "";
}

$result = $tracker->prepare("INSERT INTO 'pages' ('page', 'ip', 'browser', 'referer') VALUES (:page, :ip, :browser, :referer)");
$result->execute(
            array(
                ':page' => $page,
                ':ip' => $ip,
                ':browser' => $browser,
                ':referer' => $referer
                )
            );

其次,有人可以向我解释为什么我不应该使用query()来做所有事情吗?现在我看到我应该使用查询进行非动态查询,并为动态准备/执行,但查询适用于两者。

谢谢!

1 个答案:

答案 0 :(得分:1)

我看到的问题(可能有其他问题)是你用单引号包装列名。 列名和表名是标识符而非字符串文字 。如果您在它们上使用了保留关键字,或者列名称以及表名称中包含空格,则应使用反引号进行转义,而不是单引号,

INSERT INTO pages (page, ip, browser, referer) VALUES (...)