PHP PDO不从其他类返回任何数据

PHP PDO不从其他类返回任何数据,php,class,pdo,Php,Class,Pdo,我有下面的脚本,根本没有返回任何东西,我得到的最好的是一个var_转储,说bool(false)。。我的错误日志中没有任何内容,也没有引发异常: index.php: require("php/bootstrap.php"); $campaign = new Campaign($_GET['campaign'], $mysql); bootstrap.php: define ("MYSQL_USER", "specialagent"); define ("MYSQL_PASS", "super

我有下面的脚本,根本没有返回任何东西,我得到的最好的是一个var_转储,说bool(false)。。我的错误日志中没有任何内容,也没有引发异常:

index.php:

require("php/bootstrap.php");
$campaign = new Campaign($_GET['campaign'], $mysql);
bootstrap.php:

define ("MYSQL_USER", "specialagent");
define ("MYSQL_PASS", "supertopsecret");
define ("MYSQL_HOST", "127.0.0.1");
define ("MYSQL_PORT", "3306");
define ("MYSQL_DB", "databasewithsecretinformation");


/* Auto include classes on instantiation */
function __autoload($class_name) {
    include 'classes/'.$class_name.'.php';
}

/* Connections */
try {
$mysql = new PDO("mysql:host=".MYSQL_HOST.";dbname=test", MYSQL_USER, MYSQL_PASS);
} catch(PDOException $e) {
die("There was a problem connecting to the database. Error: " . $e->getMessage());
}
Campaign.php

class Campaign {
protected $dbh;
private $campaign_id = "";
private $name = "";

public function __construct ($campaign_id, PDO $db) {

    //if ($campaign_id) {
        $this->setCampaignID($campaign_id);
        $this->dbh = $db;
        $this->loadCampaignInfo();
    //}
}


public function getCampaignID() {
    return $this->campaign_id;
}

public function setCampaignID($id) {
    $this->campaign_id = $id;
}

public function __destruct() {
    //$this->dbh = null;
}

public function loadCampaignInfo() {
    /* Get info from database */
    $sql = "SELECT * FROM campaigns WHERE campaign=:campaignID";

    try {
        echo "trying query...$sql<br />";
        if ($this->dbh instanceof PDO) {
            $stmt = $this->dbh->prepare($sql);
            $stmt->bindParam(":campaignID", $this->campaign_id, PDO::PARAM_STR);
            $stmt->execute();
            $row = $stmt->fetch();

            echo "Returned Data: ";
            var_dump($row);
        } else {
            echo "Not a valid PDO resource";
        }


    } catch (PDOException $e) {
        echo "Problem : " . $e->getMessage;
    } catch (Exception $e) {
        echo "Other problem : " . $e->getMessage;
    }


    /* Set properties */
}

问题与PDO无关。
返回的数据:bool(false)
表示未找到与条件匹配的行。
检查表格是否包含数据,并检查输入。
检查你是否从autoload和所有类似的东西中获得了正确的类

另外,将引导连接更改为

ini_set('display_errors',1);
error_reporting(E_ALL);

/* Connections */
$mysql = new PDO("mysql:host=".MYSQL_HOST.";dbname=test", MYSQL_USER, MYSQL_PASS);
$mysql->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
您可能还希望使该方法不那么臃肿:

/* Get info from database */
public function loadCampaignInfo()
{
    $sql = "SELECT * FROM campaigns WHERE campaign=?";
    $stmt = $this->dbh->prepare($sql);
    $stmt->execute([$this->campaign_id]);
    return $stmt->fetch();
}

问题是,用户没有访问数据库的正确权限,在您的常识表明问题出在creds之后,登录到MySQL cli并注意到数据库不在SHOW DATABASES中


谢谢大家的帮助。

我不确定是否遵循了您的代码。构造函数基于
$\u GET['campaign']
填充活动ID,因为这是您传入的内容。但是您的SQL的WHERE子句是
WHERE campaign='{$\u GET['campaign']}'"; -您包含的输出显示这是
:活动ID
。您是否通过
$\u GET
传入
:活动ID
?很抱歉,我将SQL更改为更简单,并且没有完全更改回去,编辑了帖子以显示它现在所说的内容。还有一些想法-您将
活动ID
绑定为字符串;您可能希望尝试将其绑定为整数。另外,您应该能够通过
var_dump($stmt->ErrorInto())和
var_dump($this->dbh->ErrorInfo())
致命错误:调用/var/www/html/scripts/energy/classes/Campaign.php中未定义的方法PDOStatement::ErrorInto(),在第100行,我也做了echo get_class($stmt)它返回PDoooops,typo-这两个函数都是
ErrorInfo()
。布尔值为false不是意味着查询有问题,结果失败了吗?我用Heidi SQL构建了查询,然后复制并粘贴到代码中。SQL是可靠的。我会尝试你的建议,然后发回。谢谢这与Heidi SQL无关,而是与您使用这些证书连接的数据库有关。好的,我刚刚使用这些证书登录到MySQL cli,而数据库不会出现在SHOW DATABASES中。让我改变priv,我会得到这个答案,因为这个问题太本地化了。所以,实际的问题是你没有使用db常量。否则,将在连接时抛出错误
/* Get info from database */
public function loadCampaignInfo()
{
    $sql = "SELECT * FROM campaigns WHERE campaign=?";
    $stmt = $this->dbh->prepare($sql);
    $stmt->execute([$this->campaign_id]);
    return $stmt->fetch();
}