-1

我正在将 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()); 的方式显示错误消息。将。

有任何想法吗?

4

3 回答 3

1

您在通话中缺少错误处理核心。检查 PDO 错误:

一个。将 PDO 错误模式更改为异常:

$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

在此之后,一个 PDO 错误将导致一个 PDOException 的实例,您可以捕获/检查它。

或者

湾。在查询执行/PDO 调用后使用errorInfo函数检查错误。

$stmt = $dbh->prepare('bogus sql');
if (!$stmt) {
    echo "\nPDO::errorInfo():\n";
    print_r($dbh->errorInfo());
}
于 2013-01-17T09:35:34.560 回答
0
$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));
于 2013-01-17T09:35:41.223 回答
0

在 mysql 中,我们知道有 mysql_fetch_row()、mysql_fetch_array() 和 mysql_fetch_assoc()。

对于 PDO,有很多类型的 fetch

<?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);
}
?>

如果您使用通配符会更好吗?对于属性(因为它类似于 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(); 
于 2013-01-17T09:36:39.340 回答