Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么使PDO比普通mysql更安全?_Mysql_Pdo_Sql Injection - Fatal编程技术网

什么使PDO比普通mysql更安全?

什么使PDO比普通mysql更安全?,mysql,pdo,sql-injection,Mysql,Pdo,Sql Injection,我一次又一次地读到Stackoverflow,我应该使用PDO访问MySQL,因为它更安全。最近,我使用一些在线教程将一些select和insert语句更改为PDO,发现它们与我的原始代码非常相似。这让我觉得也许我错过了什么 所以,我的问题是什么使PDO比普通mysql更安全?有什么能让这些例子更安全吗 编辑:我已将插入代码粘贴到下面。如果你能找到一些让它更安全的方法,请告诉我 include 'dataB3S3.php'; try { $dbh = new PDO("mysq

我一次又一次地读到Stackoverflow,我应该使用PDO访问MySQL,因为它更安全。最近,我使用一些在线教程将一些select和insert语句更改为PDO,发现它们与我的原始代码非常相似。这让我觉得也许我错过了什么

所以,我的问题是什么使PDO比普通mysql更安全?有什么能让这些例子更安全吗

编辑:我已将插入代码粘贴到下面。如果你能找到一些让它更安全的方法,请告诉我

include 'dataB3S3.php';

try {
        $dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);
        /*** connect to DB ***/


        /*** INSERT data ***/
        $count = $dbh->exec("INSERT INTO $table(`instance` ,`uid`,`teid`) VALUES (NULL,'$userID','$teid')");

         /*** display the id of the last Auto INSERT ***/
        $lastInsertValue=$dbh->lastInsertId();

        /*** close the database connection ***/
        $dbh = null;  
}

您错过了一个主要好处。使用它们而不是像示例代码那样直接在查询中嵌入变量,可以更好地防止意外的SQL注入漏洞。

您错过了一个主要好处。使用它们而不是像示例代码那样直接在查询中嵌入变量,可以更好地防止意外的SQL注入漏洞。

是的。ceejayoz有一个很好的观点,但对我来说,除了过滤和清理数据外,PDO实际上可以将生成的数据集注入到成熟的对象中

这是我不久前从学校学到的

为了有一个代码示例,我将在这里粘贴e-satis代码,因为我手边没有可邮寄的代码示例,但相信我,我已经多次借用了这个概念:

class Student {

    public $id;
    public $first_name;
    public $last_name

    public function getFullName() {
        return $this->first_name.' '.$this->last_name
    }
}

try 
{
    $dbh = new PDO("mysql:host=$hostname;dbname=school", $username, $password)

    $stmt = $dbh->query("SELECT * FROM students");

    /* MAGIC HAPPENS HERE */

    $stmt->setFetchMode(PDO::FETCH_INTO, new Student);


    foreach($stmt as $student)
    {
        echo $student->getFullName().'<br />';
    } 

    $dbh = null;
}
catch(PDOException $e)
{
    echo $e->getMessage();
}
并不是说我是一个情人,而是在他们的抽象中对PDO进行了非常棒的使用。查看与ZEND_DB_相关的类,看看PDO与有价值的库结合使用时有多强大

作为奖励,这个框架的大多数类(如果不是全部的话)都是独立运行的或作为模块化组件运行的。我自己也在小项目中使用过很多,它们的LIB实际上非常简单易用,并且有很好的文档记录,并且在许多环境中进行了大量的尝试和测试


快乐编码

是的。ceejayoz有一个很好的观点,但对我来说,除了过滤和清理数据外,PDO实际上可以将生成的数据集注入到成熟的对象中

这是我不久前从学校学到的

为了有一个代码示例,我将在这里粘贴e-satis代码,因为我手边没有可邮寄的代码示例,但相信我,我已经多次借用了这个概念:

class Student {

    public $id;
    public $first_name;
    public $last_name

    public function getFullName() {
        return $this->first_name.' '.$this->last_name
    }
}

try 
{
    $dbh = new PDO("mysql:host=$hostname;dbname=school", $username, $password)

    $stmt = $dbh->query("SELECT * FROM students");

    /* MAGIC HAPPENS HERE */

    $stmt->setFetchMode(PDO::FETCH_INTO, new Student);


    foreach($stmt as $student)
    {
        echo $student->getFullName().'<br />';
    } 

    $dbh = null;
}
catch(PDOException $e)
{
    echo $e->getMessage();
}
并不是说我是一个情人,而是在他们的抽象中对PDO进行了非常棒的使用。查看与ZEND_DB_相关的类,看看PDO与有价值的库结合使用时有多强大

作为奖励,这个框架的大多数类(如果不是全部的话)都是独立运行的或作为模块化组件运行的。我自己也在小项目中使用过很多,它们的LIB实际上非常简单易用,并且有很好的文档记录,并且在许多环境中进行了大量的尝试和测试


快乐编码

本教程中确实有一节介绍了这一点,但是它的大部分描述和解释都是完全错误的。首先,PDO::quote不在内部调用。这类文章是PHP名声不好的根本原因PDO::quote类似于mysql_real_escape_string?是的,只是它还将值括在引号中。参数绑定非常优越,因此请不要使用此方法。有关更多信息,请参阅。注意,一些驱动程序不实现报价也是非常重要的。首先想到的是MSSQL。引用不起任何作用…:本教程的另一个副本中确实有一个章节,但是它的大部分描述和解释都是完全错误的。首先,PDO::quote不在内部调用。这类文章是PHP名声不好的根本原因PDO::quote类似于mysql_real_escape_string?是的,只是它还将值括在引号中。参数绑定非常优越,因此请不要使用此方法。有关更多信息,请参阅。注意,一些驱动程序不实现报价也是非常重要的。首先想到的是MSSQL。引用不起任何作用…:是的,ZF有许多有效的替代品。感谢您指出这一点。是的,ZF有许多有效的替代品。谢谢你指出这一点。