2016-11-17 51 views
1

我的代碼有一部分出現問題。我加了一些示例數據庫PHP |準備/執行不起作用

<?php 
require_once 'db.php'; 
$res = $bdd->query("SELECT * FROM bien"); 
$res2 = $bdd->prepare("SELECT * FROM bien_option WHERE id_bien=:id"); 
?> 
<html> 
<head> 
<meta charset="utf-8"> 
</head> 
<h2>Mes Biens:</h2> 
<?php 

while($mesBiens = $res->fetch()){ 
    echo '<h3>Nom : '.$mesBiens['nom'].'</h3>'; 
    echo 'Type : '.$mesBiens['type'].'<br/>'; 
    echo 'Prix : '.$mesBiens['prix'].'€<br/>'; 
    echo 'Surface : '.$mesBiens['surface'].'m²<br/>'; 
    while($mesOptions = $res2->fetch()){ 
     $res = $bdd->execute(array(':id'=>$mesBiens['id'])); 
     echo $mesOptions['nom']; 
    } 
} 



?> 

echo mesOptions['nom']沒有表現出任何東西,我沒有收到錯誤消息。

+0

當我的,而我得到這個之前添加它:(!) – bezoo

+0

致命錯誤:未捕獲的錯誤:調用未定義的方法PDO ::執行(!)在第18行C:\ wamp64 \ www \ ex1 \ index.php (!)錯誤:在C:\ wamp64 \ www \ ex1 \ index.php中調用未定義的方法PDO :: execute() – bezoo

+0

「我在bdd中添加了一些示例」 - 在問題中我沒有看到與BDD有關的任何內容。 – Quentin

回答

2

您需要執行您的對帳單。

此查詢直接從數據庫:

$res = $bdd->query("SELECT * FROM bien"); 

這是爲了準備在服務器上的聲明。考慮一下,告訴數據庫你將在下次發送很多這些查詢。該數據庫不「編譯」這一說法,因此是有效的:

$statment = $bdd->prepare("SELECT * FROM bien_option WHERE id_bien=:id"); 

現在你有一個值綁定(的:ID)和execute it

$statement->bindParam(':id', $id, PDO::PARAM_INT); 
$statement->execute(); 

此時數據庫中使用執行的SQL您的參數和準備的結果對你來說,你需要現在就撥打:

$result = $statement->fetchAll(); 

或者,如果你喜歡有它在一個循環:

while($mesBiens = $statement->fetch()) { ... } 

請注意,如果您經常重複查詢,準備語句會有很大的意義。

0

所以我只是修改了一些東西,它的工作:)

while($mesBiens = $res->fetch()){ 
    echo '<h3>Nom : '.$mesBiens['nom'].'</h3>'; 
    echo 'Type : '.$mesBiens['type'].'<br/>'; 
    echo 'Prix : '.$mesBiens['prix'].'€<br/>'; 
    echo 'Surface : '.$mesBiens['surface'].'m²<br/>'; 
    $options = $res2->execute(array(':id'=>$mesBiens['id'])); 

    while($mesOptions = $res2->fetch()) { 
     echo 'Option: '.$mesOptions['nom'].'<br/>'; 
    } 
}