【问题标题】:PDO prepared statements. Select everythingPDO 准备好的语句。选择所有内容
【发布时间】:2017-02-11 11:00:18
【问题描述】:

我尝试学习 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;

【问题讨论】:

  • 如果你不接受用户输入,就没有必要使用pdo,你甚至可以用mysql代替mysqli

标签: php mysql pdo prepared-statement


【解决方案1】:

execute() 运行准备好的语句,允许您绑定参数以避免转义或引用参数。如果您多次重复查询,execute 也会执行得更好。

query() 运行标准 SQL 语句,并要求您正确转义所有数据以避免 SQL 注入和其他问题。

所以在你的情况下,你没有什么可以逃避的......因为 sql i 的所有代码都是基于文字的,你不需要prepare()

【讨论】:

  • 好的,我不需要准备好的语句。我现在的问题是:如果我按原样使用代码可以吗?还是删除prepare和execute这行代码,换个foreach更好?
  • 使用查询代替 od 准备并执行一个非常非常小的实际 0 的优势 .. 对我来说,如果您重复相同的代码 10000 次,您也可以使用您拥有的代码。
【解决方案2】:

如果查询字符串是常量,则没有注入恶意 SQL 的地方。正如您所指出的,使用准备好的语句确实是多余的。

【讨论】:

  • 即使我不需要准备好的语句,我可以使用现在的代码吗?
  • 这有点多余,但我个人不会费心重写它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-30
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多