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

时间:2015-01-04 22:18:07

标签: php mysql pdo

这是我在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;
}

1 个答案:

答案 0 :(得分:0)

首先,永远不要在SQL查询中使用变量,使用prepare语句。

对你提问。 PDO::query方法返回PDOStatement个对象。使用此对象,您可以从数据库服务器获取结果。

只需致电$this->_db->query('Your SQL query')->fetchAll()即可获得您的行。