PHP PDO不从其他类返回任何数据
我有下面的脚本,根本没有返回任何东西,我得到的最好的是一个var_转储,说bool(false)。。我的错误日志中没有任何内容,也没有引发异常: index.php: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
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();
}