我是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值吗?
答案 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。