具有绑定功能的PDO类

时间:2014-09-08 11:38:32

标签: php mysql pdo

我是PDO的新手,我发现本教程如何编写PDO php类: http://culttt.com/2012/10/01/roll-your-own-pdo-php-class/

此类包含绑定功能:

public function bind($param, $value, $type = null){
    if (is_null($type)) {
        switch (true) {
            case is_int($value):
                $type = PDO::PARAM_INT;
                break;
            case is_bool($value):
                $type = PDO::PARAM_BOOL;
                break;
            case is_null($value):
                $type = PDO::PARAM_NULL;
                break;
            default:
                $type = PDO::PARAM_STR;
        }
    }

    $this->stmt->bindValue($param, $value, $type);
}

当我使用它时,我的代码如下:

if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
    //$blang (browser language)
    $blangtmp = $_SERVER['HTTP_ACCEPT_LANGUAGE']; 
    $blangtmp = str_replace( ' ', '', $blangtmp );
    $blangtmp = explode( ",", $blangtmp );
    $blang = $blangtmp[0];

    $blang = "'%$blang'";

    $database = new Database();
    $database->query('SELECT id_language FROM `my_table` WHERE language_locale LIKE :blang ;');
    $database->bind(':blang', $blang);
    $idlang = $database->execute(); 

    $database = null;

    echo $idlang;

}

当我回复$ idlang时,我总是1 ...

看起来绑定根本不起作用...... 我没有错误也没有警告。

知道如何获得正确的idlang值吗?

3 个答案:

答案 0 :(得分:0)

从您的链接:

public function execute(){
    return $this->stmt->execute();
}

所以execute()只不过是PDOStatement::execute()的包装器:

  

成功时返回TRUE,失败时返回FALSE。

如果在将其转换为字符串时获得1,则表示一切正常。

答案 1 :(得分:0)

根据教程,execute函数只会执行你的sql查询

你需要使用这个

public function resultset(){
    $this->execute();
    return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
}

将返回数据库中的记录。

答案 2 :(得分:0)

$database->execute();返回true时,您需要获取数据

$success = $database->execute(); 
if(!success){
   die('failed');
}      
$records = $database->resultset();

foreach($records as $record){
  $id_lang = $record['id_language'];
  echo $id_lang;
}

或者如果您只想要一个结果,请使用single()

这就是说我没有看到滚动你自己的PDO课程有任何好处,它只会限制你。

即使是教程作者也同意这一点:

  

我们看的课程   非常适合快速开始使用PDO,它确实有一些   限制,如果你想做更复杂的事情而不是简单的事情   选择,插入,更新和删除。   我认为确切知道发生了什么也更有益   在您的代码的引擎盖下。通过确切知道某些东西的运作方   你将获得更深刻的理解感,你会成为   能够在时机成熟时排除故障并推进您的代码。

但我不判断,所以请记住最好不要包装已经是包装类的PDO。