我试图从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
}
?>
截至目前 - 一切都没有出来。如果这绝对错误,我不会感到惊讶。
答案 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);