首页 文章

PHP:mysql v mysqli v pdo [关闭]

提问于
浏览
18

我一直在阅读有关使用mysqli与pdo在php中使用mysql的一些问题 .

我见过像mysqli or PDO - what are the pros and cons?Moving from mysql to mysqli or pdo?这样的问题,它们都只涉及mysqli v pdo . 我对这两种方法中的哪一种更好更感兴趣 .

我想知道为什么应该避免mysql_函数 . 当然,他们的文档http://php.net/manual/en/faq.databases.php#faq.databases.mysql.deprecated,线程PHP PDO and MySQLi建议PDO和MySQLi更强大,而线程What is the difference between MySQL, MySQLi and PDO?暗示这些新方法更安全 .

总的来说,我想知道mysql_方法的主要缺点是什么,以及有什么理由可以避免它(我想更具体的是因为它已被弃用) . 我打算更新我受影响的脚本,并对这个旧方法被弃用的原因感到好奇 .

谢谢!

3 回答

  • 8

    从选择MySSQL API @ PHP.net

    // mysqli
    $mysqli = new mysqli("example.com", "user", "password", "database");
    $result = $mysqli->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
    $row = $result->fetch_assoc();
    echo htmlentities($row['_message']);
    
    // PDO
    $pdo = new PDO('mysql:host=example.com;dbname=database', 'user', 'password');
    $statement = $pdo->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
    $row = $statement->fetch(PDO::FETCH_ASSOC);
    echo htmlentities($row['_message']);
    
    // mysql
    $c = mysql_connect("example.com", "user", "password");
    mysql_select_db("database");
    $result = mysql_query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
    $row = mysql_fetch_assoc($result);
    echo htmlentities($row['_message']);
    

    创建一个对象,如mysqli和PDO,是编写任何现代软件的推荐方法 . mysql liblary是针对PHP 2.0版发布的,从那时起就没有重大改写 . PHP 2.0于1997年发布,应该足以解释为什么不使用它 .

  • 2

    好吧,如果你没有手动正确地清理输入,mysql函数非常容易注入SQL . mysqli和pdo具有参数化的sql语句选项,可以避免这种风险 . 在我看来,它们通常也有更好的编码风格 .

  • 23

    mysql_query 函数的设计是这样的,你可以重新注入它,如果你错过了一个整个应用程序就可以被automatic SQL vulnerability exploit tool破坏 .

    mysqli 和PDO都支持占位符,这些占位符是确保您的查询免受SQL注入错误所必需的 . 在所有事情上调用 mysql_real_escape_string 不仅乏味,而且容易出错,而这就是出现问题的地方 .

    mysql 函数是PHP早期的产物,并且比作为选项的 mysqli 或设计的PDO提供的新的面向对象特性更加有限 .

    使用这两个新接口之一有很多很好的理由,但最重要的是 mysql_query 功能太危险而无法在 生产环境 代码中使用 . 有了它,你将永远是一个错误,远离一些非常严重的问题 .

    有充足的密码和信用卡号码的数据库不断出现的原因 . 拥有明显的SQL注入点使得完全接管站点变得非常容易 .

相关问题