尝试用准备好的声明回应

时间:2014-03-18 01:54:36

标签: php mysql pdo

我试图从mySQL(关于时间?)转到PDO - 但我无法理解应该如何编写内容。我想要保护免受注射,但我无法弄清楚如何正确地做到这一点。这看起来很混乱。可能是因为我完全做错了吗?

一直在寻找各方面的帮助,但是:(

有人可以帮我吗?解释/表明我是五岁?

<?php
$col_playername = "playername";
$tbl_playerdata = "player_data";
$post_search = "$_POST[search]";

$sth = $dbh->prepare("SELECT :col_playername FROM :tbl_playerdata
                WHERE :col_playername LIKE %:post_search%
                LIMIT 5");

$sth->bindParam(":col_playername", $col_playername);
$sth->bindParam(":tbl_playerdata", $tbl_playerdata);
$sth->bindParam(":post_search", $post_search);  

$sth->execute();

foreach ($sth as $row)
{
    ?>
    <div id="search_show">
        <a href="?target=<?php echo $row["playername"]; ?>"><?php echo $row["playername"]; ?></a> 
    </div>
    <?php
}
?>

截至目前 - 一切都没有出来。如果这绝对错误,我不会感到惊讶。

1 个答案:

答案 0 :(得分:1)

$statement->execute()将执行,但不会获取您的行。

您需要添加$statement->fetch()以获取一个结果集,或$statement->fetchAll来获取数组:

$sth->execute();

$rows = $sth->fetchAll();

foreach ($rows as $row)
{
    //do stuff
}

注意:由于您将结果作为关联数组处理,因此在准备之前应该使用。它将使您无需使用每个fetch()指定获取模式。

$dbh->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);