2013-01-17 37 views
-1

我正在將所有與PHP相關的mysql轉換爲PDO格式。這就是說,我需要問一個問題。從傳統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(); 

然而,當$計數呼應出來,似乎什麼都沒有。我有強烈的感覺是因爲錯誤與查詢有關。但是,我對PDO相當陌生,不能以mysql_query()或die(mysql_error())的方式發出錯誤消息;將。

任何想法?

+0

什麼是你的服務器日誌說? –

+0

使用try catch它會幫助你找到運行時異常。除此之外,你不綁定第二個變量:away_score –

+1

它因爲你丟失':away_score'的佔位符,使用'setAttribute(PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION);'http:// stackoverflow。 com/questions/14374497/inserted-data-in-mysql-data-base-in-php/14374814#14374814 –

回答

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 here示出了查詢應準備並比先執行。之後,您將能夠使用fetchColumn獲取結果。另外,它看起來像缺少一個away_score值。我已經通過它在執行功能

如果客場得分一欄,請不要將其標記爲一個佔位符(其名稱前:集):

$query = "SELECT COUNT(*) FROM table WHERE home_team=:team AND home_score > away_score"; 

,比執行:

$stmt->execute(array(':team' => $team)); 
+0

謝謝。我想所有我需要知道的是,「:」是關鍵詞而不是另一個列名。我對PDO很陌生。 – Lance

1

您從通話中缺少處理內核的錯誤。檢查PDO錯誤:

a。更改PDO的錯誤模式例外:

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

在此之後,將導致PDOException的實例,可以捕獲/檢查一個PDO錯誤。

b。使用errorInfo函數執行查詢執行/ PDO調用後檢查錯誤。

$stmt = $dbh->prepare('bogus sql'); 
if (!$stmt) { 
    echo "\nPDO::errorInfo():\n"; 
    print_r($dbh->errorInfo()); 
} 
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); 
} 
?> 

如果您使用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();