如何将查询转换为预准备语句?

时间:2016-01-31 13:04:36

标签: php sql prepared-statement

我有一个工作查询,我想转换为准备好的语句。到目前为止,遗憾的是没有成功。 “affe4.jpg”应该换成变量$ name:

universal_newlines=True

我已经更新了我的代码,为什么它不起作用?

    <?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>

2 个答案:

答案 0 :(得分:0)

我假设它是PDO:

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

查看PDOStatement::execute处的示例。绑定参数有两种方法:您可以命名它们(:dateiname)或不命名(?)。对于仅1个参数,使用占位符?的详细程度较低。

答案 1 :(得分: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
    ));
*/
?>