-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エラーをチェックするには:

a。PDOエラーモードを例外に変更します。

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

この後、PDOエラーはPDOExceptionのインスタンスになり、これをキャッチ/チェックできます。

また

b。errorInfo関数を使用したクエリ実行/PDO呼び出し後のエラーを確認します。

$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の場合、多くの種類のフェッチがあります

<?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 に答える