2016-11-17 52 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/>'; 
    } 
}