什么使PDO比普通mysql更安全?
我一次又一次地读到Stackoverflow,我应该使用PDO访问MySQL,因为它更安全。最近,我使用一些在线教程将一些select和insert语句更改为PDO,发现它们与我的原始代码非常相似。这让我觉得也许我错过了什么 所以,我的问题是什么使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
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有许多有效的替代品。谢谢你指出这一点。