2014-05-11 78 views
0

我能夠從標準的SQLi查詢中得到結果,但是當涉及到預處理語句時,我很好,直到從查詢中獲得結果。如何從使用PHP的預準備語句中獲得結果?

作爲背景,查詢將產生多行。

$sql = "SELECT * FROM blog WHERE ID=?"; 

if (!$stmt = $con -> prepare($sql)) { 
    echo "Prepare failed: (" . $con->errno . ") " . $con->error; 
} 

if (!$stmt->bind_param("i", $_GET["ID"])) { 
    echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error; 
} 

if (!$stmt->execute()) { 
    echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error; 
} 

while($row = $stmt->fetch_assoc()){ 
    $blog_title = $row['title']; 
    $blog_body = $row['body']; 
    $blog_blurb = $row['blurb']; 
    $blog_date = $row['posted']; 
    $blog_tags = $row['tags']; 
} 

這將導致 「致命錯誤:調用未定義的方法mysqli_stmt :: FETCH_ASSOC()」 在while循環條件。不過,我嘗試了PHP手冊中概述的內容,但未成功。

它一直在竊聽我好幾天,謝謝你提前。

+2

嘗試'的var_dump(get_class_method(0函數$語句))'看到可用的方法。 –

+1

使用'while($ row = $ stmt-> fetch()){' –

+1

有趣,但函數調用完全相同 - get_result() –

回答

0

這是更好的方法來做到這一點。

$mydatabase = new mysqli('localhost', 'root', '', 'database'); 
if ($mydatabase->connect_errno) { 
echo "Failed to connect to Database"; 
} 

$id = $_GET['id']; 
$stmt = $mydatabase->prepare("SELECT * FROM `blog` where ID = ?"); 
echo $mydatabase->error;//this will display error if something goes wrong. 
$stmt->bind_param('i', $id); 
$stmt->execute(); 
$result = $stmt->get_result();//get the results 

while($row = $result->fetch_assoc()){ 
echo $row['whatever'];//do whatever here 
} 

編輯

$stmt->bind_result($column1, $column2); 
while ($stmt->fetch()) 
{ 
echo $column1; 
echo $column2; 
} 
+0

通過這段代碼,我得到了」致命錯誤:調用未定義方法mysqli_stmt :: get_result()「//獲取結果」 –

+0

它在我的系統上工作,如果它不適用於你的系統,那麼可能的原因可能是MySQL本地驅動程序(mysqlnd)未安裝在您的Web服務器上。在這種情況下,您可以將代碼更改爲已編輯的版本。 – Magna

相關問題