我尝试学习PDO和准备好的陈述。我已阅读所有文档,我有一些问题。如果我理解,在下面的情况下,这是不可能的,并且不需要准备好的陈述。那是对的吗?它足够安全吗?
try {
$conn = new PDO("mysql:host=$servername; dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully <br>";
$sql = "SELECT title_post, subtitle_post
FROM en";
$statement = $conn->prepare($sql);
$statement->execute();
$rows = $statement->fetchAll();
foreach($rows as $row){
echo $row['title_post'] . '<br>';
echo $row['subtitle_post'] . '<br>';
}
}
catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
$conn = null;
答案 0 :(得分:1)
如果查询字符串是常量,则无法注入恶意SQL。正如您所指出的,使用预准备语句确实是多余的。
答案 1 :(得分:1)
execute()
运行一个预准备语句,允许您绑定参数以避免需要转义或引用参数。如果您多次重复查询,执行也会更好。
query()
运行标准SQL语句,要求您正确转义所有数据以避免SQL注入和其他问题。
所以在你的情况下你还没有逃脱..因为sql的所有代码都基于文字并且你不需要prepare()