从传统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

上一篇: Switch query from traditional MySQL to PDO Format

下一篇: How to make website more secured?