这是我在php中挣扎的代码的快照。我有一个数据库对象、一个活动类和一个预订表格。从预订表格中,我将三个变量传递给查询数据库的检查可用性方法。var 转储正在返回:
object(DB)#3 (6) { ["_pdo":"DB":private]=> object(PDO)#4 (0) { } ["_query":"DB":private]=>
object(PDOStatement)#6 (1) { ["queryString"]=> string(99) "SELECT * FROM `activity` WHERE name =
'Archery' AND act_date = '05/01/2015' AND time_from = '10.00'" } ["_error":"DB":private]=>
bool(false) ["_results":"DB":private]=> array(0) { } ["_count":"DB":private]=> int(0)
["_data":"DB":private]=> NULL }
这让我认为查询没有返回某些内容,但查询确实返回了 MySQL 中的记录。任何帮助将不胜感激。
1. 调用方式检查可用性:
if($activity->checkDateTimeAvailability($act_name, $date, $time) === false)){
// Do something here
}
//Method to check if the activity is available at the requested date and time:
public function checkDateTimeAvailability($name, $date, $time) {
$result = $this->_db->query("SELECT * FROM `activity` WHERE name =
'$name' AND act_date = '$date' AND time_from = '$time'");
if(!empty($result)){
echo "query successful";
var_dump($result);
return true;
} else {
return false;
}
}
//Generic query method:
public function query($sql, $params = array()) {
// reset to ensure an error from a previous query is not returned.
$this->_error = false;
if($this->_query = $this->_pdo->prepare($sql)) {
$x = 1;
if(count($params)) {
foreach($params as $param) {
$this->_query->bindValue($x, $param);
$x++;
}
}
if($this->_query->execute()) {
$this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
$this->_count = $this->_query->rowCount();
} else {
$this->_error = true;
}
}
return $this;
}
首先,永远不要在SQL查询中使用变量,使用prep语句。
给你的问题。PDO::query
方法返回一个PDOStatement
对象。使用此对象,您可以从数据库服务器获取结果。
只需拨打$this->_db->query('Your SQL query')->fetchAll()
,您就可以获得行。