从传统MySQL切换到PDO格式
我正在将PHP中所有与mysql相关的东西转换为PDO格式。 这就是说,我需要问一个问题。
我有一个看起来像这样的查询:
$query = "SELECT COUNT(*) FROM table WHERE home_team = '".$team."' AND home_score > away_score";
有了PDO,我试过了:
$query = "SELECT COUNT(*) FROM table WHERE home_team=:team AND home_score>:away_score";
$stmt = $db->prepare($query);
$stmt->bindValue(':team', $team, PDO::PARAM_STR);
$count = $stmt->fetchColumn();
但是,当$ count被回显出来时,什么都不会出现。 我有强烈的感觉是因为错误与查询有关。 但是,我对PDO相当陌生,不能以mysql_query()或die(mysql_error())的方式发出错误消息; 将。
有任何想法吗?
$query = "SELECT COUNT(*) FROM table WHERE home_team=:team AND home_score>:away_score";
$stmt = $db->prepare($query);
$stmt->execute(array(':team' => $team, ':away_score' => $away_score)); //- you are missing this line
$count = $stmt->fetchColumn();
这里的例子1显示查询应该被准备并且首先被执行。 之后,您将能够使用fetchColumn获取结果。 另外,它看起来像缺少一个away_score值。 我已经在执行功能中通过了它
如果离开分数是一列,请不要将其标记为占位符( :
在其名称前面设置):
$query = "SELECT COUNT(*) FROM table WHERE home_team=:team AND home_score > away_score";
而不是执行中:
$stmt->execute(array(':team' => $team));
您从通话中缺少错误处理核心。 检查PDO错误:
一个。 将PDO错误模式更改为例外:
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
在此之后,PDO错误将导致PDOException的实例,您可以捕获/检查该实例。
要么
湾 使用errorInfo函数查询执行/ PDO调用后检查错误。
$stmt = $dbh->prepare('bogus sql');
if (!$stmt) {
echo "nPDO::errorInfo():n";
print_r($dbh->errorInfo());
}
在mysql中,我们知道有mysql_fetch_row(),mysql_fetch_array()和mysql_fetch_assoc()。
对于PDO,有很多类型的提取
<?php
// configuration
$dbtype= "mysql";
$dbhost= "localhost";
$dbname= "test";
$dbuser= "root";
$dbpass= "admin";
// database connection
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);
// query
$sql = "SELECT title FROM books ORDER BY title";
$q = $conn->query($sql);
// fetch
while($r = $q->fetch()){
print_r($r);
}
// result
//Array ( [title] => book_title [0] => book_title )
?>
这是当你不必准备声明,如果你必须这样做,你应该遵循这一步
<?php
// configuration
$dbtype= "mysql";
$dbhost= "localhost";
$dbname= "test";
$dbuser= "root";
$dbpass= "admin";
// database connection
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);
$title = 'PHP AJAX is Awesome';
// query
$sql = "SELECT * FROM books WHERE title = ?";
$q = $conn->prepare($sql);
$q->execute(array($title));
$q->setFetchMode(PDO::FETCH_BOTH);
// fetch
while($r = $q->fetch()){
print_r($r);
}
?>
如果你使用Wild Card更好? 为属性(因为它类似于一个ORM系统)
例如,你应该这样做
$query = "SELECT COUNT(*) FROM table WHERE home_team=? AND home_score > ?";
$stmt = $db->prepare($query);
$stmt->execute(array($team,$HScore));
$stmt->setFetchMode(PDO::FETCH_BOTH);
$numbers = $stmt->fetch();
链接地址: http://www.djcxy.com/p/93709.html