PHP/SQL PDO准备/执行Insert语句不工作

PHP/SQL PDO准备/执行Insert语句不工作,php,mysql,sql,pdo,Php,Mysql,Sql,Pdo,因此,我尝试在我的站点上使用PDO对象,而不是旧方法(特别是因为我听说它更适合,并且正在更新一系列查询。但是由于某种原因,无论我做什么,我都无法让prepare/execute工作 dbconnect.php: try { $main = new PDO("mysql:dbname=$dbmain;host=$dbhost", $dbuser, $dbpassword); $tracker = new PDO("mysql:dbname=$dbtracker;host=$dbho

因此,我尝试在我的站点上使用PDO对象,而不是旧方法(特别是因为我听说它更适合,并且正在更新一系列查询。但是由于某种原因,无论我做什么,我都无法让prepare/execute工作

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()?现在我看到我应该对非动态查询使用query,而对动态查询使用prepare/execute,但query对这两种查询都有效

谢谢!

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

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

有错误吗?有什么问题吗?使用准备好的/参数化查询的全部目的是将数据与命令分开。这使得SQL注入攻击不可能发生。如果使用
PDO::query()
对于任意数据,您没有这种分离,SQL注入可能会发生。@JohnVanDeWeghe,嗯,没有显示错误,但表没有更新。@Brad,哦!好吧,这就相当于我使用以前的方法。谢谢。@AndyLester,哦,天哪,我不敢相信我忘记查看错误日志了。我正在查看在我的include所在的文件夹中搜索,而不是在主文件夹中实际执行。它说这是一个语法错误。这更有意义。这起作用了!我真的不知道反勾号和单引号之间的区别,直到我在谷歌上搜索它。真不敢相信这有那么简单。