如何将我的查询转换为准备好的语句?

How do I convert my query to prepared statement?

我有一个工作查询,我想将其转换为准备好的语句。到目前为止,不幸的是没有成功。 "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>

我假设它是 PDO:

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

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

<?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
    ));
*/
?>