2016-01-31 45 views
0

我有一个工作查询,我想转换为准备好的语句。迄今为止,不幸的是没有成功。 “affe4.jpg”应该交换为一个变量$ name:如何将我的查询转换为准备好的语句?

<?php 

    $stmt = $con->query("UPDATE dbdateien 
          SET papierkorb=0 
          WHERE dateiname='affe4.jpg'"); 
    //$stmt->bindParam(':dateiname', $name, PDO::PARAM_STR); 
    //$stmt->execute(); 
    unset($stmt); 

?> 

我更新了我的代码,为什么它不工作?

  <div class="container"> 
 
      <table class="table table-hover"> 
 
       <thead> 
 
       <tr> 
 
        <th>Name</th> 
 
       </tr> 
 
       </thead> 
 
       <tbody> 
 
        <?php foreach ($erg AS $dateiname): ?> 
 
         <tr> 
 
          <td> 
 
           <div class="dropdown"> 
 
            <a class="dropdown-toggle" data-toggle="dropdown" href="#"><span class="glyphicon glyphicon-file"></span> <?php echo $dateiname['dateiname']; ?> 
 
             <span class="caret"></span></button> 
 
             <ul class="dropdown-menu"> 
 
              <li><a href="includes/wiederherstellen.php"><span class="glyphicon glyphicon-repeat"></span> Wiederherstellen</a></li> 
 
              <li><a href="#"><span class="glyphicon glyphicon-remove"></span> Endültig löschen</a></li> 
 
             </ul> 
 
           </div> 
 
          </td> 
 
          <td><?php echo $dateien['dbuser.user'] ?></td> 
 
         </tr> 
 
          <?php 
 

 
           var_dump($dateiname); 
 

 
           //$name = $_GET["name"]; 
 
           $papierkorb=0; 
 
           $stmt = $con->prepare("UPDATE dbdateien 
 
              SET papierkorb=:papierkorb 
 
              WHERE dateiname=:dateiname"); 
 
           $stmt->bindValue(':papierkorb', $papierkorb, PDO::PARAM_INT); 
 
           $stmt->bindParam(':dateiname', $dateiname, PDO::PARAM_STR); 
 
           $stmt->execute(); 
 
           unset($stmt); 
 

 
          ?> 
 
        <?php endforeach; ?> 
 
       </tbody> 
 
      </table> 
 
     </div>

这里是我的解决方案:

     <div class="container"> 
 
      <table class="table table-hover"> 
 
       <thead> 
 
       <tr> 
 
        <th>Name</th> 
 
       </tr> 
 
       </thead> 
 
       <tbody> 
 
        <?php foreach ($erg AS $dateiname): ?> 
 
         <tr> 
 
          <td> 
 
           <div class="dropdown"> 
 
            <a class="dropdown-toggle" data-toggle="dropdown" href="#"><span class="glyphicon glyphicon-file"></span> <?php echo $dateiname['dateiname']; ?> 
 
             <span class="caret"></span></button> 
 
             <ul class="dropdown-menu"> 
 
              <li><a href="includes/wiederherstellen.php"><span class="glyphicon glyphicon-repeat"></span> Wiederherstellen</a></li> 
 
              <li><a href="#"><span class="glyphicon glyphicon-remove"></span> Endültig löschen</a></li> 
 
             </ul> 
 
           </div> 
 
          </td> 
 
          <td><?php echo $dateien['dbuser.user'] ?></td> 
 
         </tr> 
 
          <?php 
 

 
           //$name = $_GET["name"]; 
 
           $papierkorb=0; 
 
           $stmt = $con->prepare("UPDATE dbdateien 
 
              SET papierkorb=:papierkorb 
 
              WHERE dateiname=:dateiname"); 
 
           $stmt->bindValue(':papierkorb', $papierkorb, PDO::PARAM_INT); 
 
           $stmt->bindParam(':dateiname', $dateiname['dateiname'], PDO::PARAM_STR); 
 
           $stmt->execute(); 
 
           unset($stmt); 
 

 
          ?> 
 
        <?php endforeach; ?> 
 
       </tbody> 
 
      </table> 
 
     </div>

+0

查询中相应的占位符在哪里?在' - > prepare'之后为什么不使用'dateiname =?'和' - > execute([$ v1])''的列表? – mario

+0

'affe4.jp'应该交换到'$ name'。占位符应该是':dateiname'。对不起,我不明白你的两个问题。 – Erich

回答

0

我假设它是PDO:

$sth = $con->prepare(" 
    UPDATE dbdateien 
     SET papierkorb=0 
    WHERE dateiname=? 
"); 
$sth->execute([ $name ]); 

查看PDOStatement::execute的示例。有两种绑定参数的方法:您可以命名它们(:dateiname)或不(?)。对于只有1个参数,使用占位符?不那么冗长。

+0

谢谢Kenney, 重点是,我不知道名字“affe4.jpg”。那只是一个测试代码。如果我将使用变量'$ dateiname',它将如何? – Erich

+0

您将使用'$ dateiname'而不是''affe4.jpg“';-)使用注释掉的行中的'$ name'更新。 – Kenney

+0

@Erich。 。 。你错过了这一点。 '$ sth'是准备好的陈述。当你执行它时(你可以多次执行),你将你想要的值传递给'execute()'。 –

0
<?php 
$papierkorb = 0; 
$dateiname = "affe4.jpg"; 
$statement = 
    " 
    UPDATE dbdateien 
    SET papierkorb = :papierkorb 
    WHERE dateiname = :dateiname 
    "; 
$query = $con->prepare($statement); 
$query->bindValue(':papierkorb', $papierkorb, PDO::PARAM_INT); 
$query->bindParam(':dateiname', $dateiname, PDO::PARAM_STR); 
$query->execute(); 

/* 
//another example 
$statement = 
    " 
    UPDATE dbdateien 
    SET papierkorb = :papierkorb 
    WHERE dateiname = :dateiname 
    "; 
$query = $con->prepare($statement); 

//example, first insert. 
$papierkorb = 0; 
$dateiname = "affe4.jpg"; 
$query->execute(array(
    ':papierkorb'=>$papierkorb, 
    ':dateiname'=>$dateiname 
    )); 

//second insert 
$papierkorb = 1; 
$dateiname = "affe5.jpg"; 
$query->execute(array(
    ':papierkorb'=>$papierkorb, 
    ':dateiname'=>$dateiname 
    )); 
*/ 
?> 
相关问题