【发布时间】:2017-09-12 07:18:41
【问题描述】:
我正在尝试在 PHP 上创建一些类和方法,并且一些函数的输出很好,但是在最后的输出中我不能抛出变量,这是我的类。
我在这里给班级打电话,
$fields = array('nik');
$query = new Query();
$query
->select($fields)
->from('data_asset_hw')
->orderby('nik','DESC')
->execute('fetchAll');
print json_encode($query);
select、from 和 orderby 很好。但我无法从最后一个函数(执行)获得输出,只是我找到了 {} 的空对象。
请参阅下面的课程,方法是 execute()。
如果我手动打印查询对象,并且输出正常。但是如果我使用返回这个$query。我发现输出是null。也许我错过了什么?
<?php
Class Query
{
private $query;
function __construct(){
$this->query = "";
}
function select($fields=array()){
if(!is_array($fields)){
$sql = sprintf("SELECT %s ",$fields);
$this->query .= $sql;
return $this;
}else{
$fields = implode("`, `", $fields);
$sql = sprintf("SELECT `%s` ", $fields);
$this->query .= $sql;
return $this;
}
}
function from($table){
$table = trim(strtolower(stripslashes($table)));
$sql = sprintf("FROM %s ", $table);
$this->query .= $sql;
return $this;
}
function orderby($field,$order){
$sql = sprintf("ORDER BY %s %s", $field,$order);
$this->query .= $sql;
return $this;
}
function where($command){
$sql = sprintf("WHERE %s ", $command);
$this->query .= $sql;
return $this;
}
function execute($fetch){
try{
$database = DatabaseFactory::getFactory()->getConnection();
(string)$this->query;
$query = $database->prepare($this->query);
if(!$query){
throw new Exception('The SQL statement can not be prepared!');
}
$execute = $query->execute();
if(!$execute){
throw new Exception('The PDO statement can not be executed!');
}
// output is normally
print_r($query->$fetch());
// cannot return object
return $query->$fetch();
} catch (PDOException $pdoException) {
echo '<pre>' . print_r($pdoException, true) . '</pre>';
exit();
} catch (Exception $exception) {
echo '<pre>' . print_r($exception, true) . '</pre>';
exit();
}
}
}
我发现我的错误只是添加 public $output;并返回 $this->output = $query->$fetch()。和 wata ......我已经完成了。 谢谢 对不起我的英语不好。
【问题讨论】:
-
结果已通过
print_r获取。您无法获取两次,因此请删除print_r行。 -
$result = $query->...->execute('fetchAll'); echo json_encode($result)怎么样?此外,所有这些print_r语句都会破坏您的 JSON 响应 -
$前面的fetch是故意的吗?在$query->$fetch()编辑:啊,我现在看到了……但是,u_mulder 是正确的。 -
@Jakumi 我使用 $ 来调用函数 fetch 或 fetchAll。
-
@Phil 如果使用 execute('fetchAll') 会出错