PHP SQL 查询,在 where 子句中有三个变量


PHP SQL Query with three variables in the where clause

这是我在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(),您就可以获得行。