1 //MySQL PDO Prepared Statements (for impossible levels)
2 $db = new PDO(‘mysql:host=‘ . $_DVWA[ ‘db_server‘ ].‘;dbname=‘ . $_DVWA[ ‘db_database‘ ].‘;charset=utf8‘, $_DVWA[ ‘db_user‘ ], $_DVWA[ ‘db_password‘]);3 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);4 $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
错误点如上 ↑
解决方法适用条件:
以下2项配置正确。
extension = php_pdo.dll
extension = php_pdo_mysql.dll
错误原因:
在:
DVWA\dvwa\includes\dvwaPage.inc.php
DVMA 默认的配置:
$_DVWA[ ‘default_security_level‘ ] = ‘impossible‘;
我们需要的实验环境一般都修改为:
$_DVWA[ ‘default_security_level‘ ] = ‘low‘;
注意这里有句注释:
// MySQL PDO Prepared Statements (for impossible levels) 意思是为PDO的预设impossible等级的检查,因为实际用的是low 所以可以 咔嚓掉了
正确做法:
//MySQL PDO Prepared Statements (for impossible levels)
//$db = new PDO(‘mysql:host=‘ . $_DVWA[ ‘db_server‘ ].‘;dbname=‘ . $_DVWA[ ‘db_database‘ ].‘;charset=utf8‘, $_DVWA[ ‘db_user‘ ], $_DVWA[ ‘db_password‘ ]);
//$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
关于PDO,百度百科解释如下:
PDO一是PHP数据对象(PHP Data Object)的缩写。
并不能使用PDO扩展本身执行任何数据库操作,必须使用一个database-specific PDO driver(针对特定数据库的PDO驱动)访问数据库服务器。
PDO并不提供数据库抽象,它并不会重写SQL或提供数据库本身缺失的功能,如果你需要这种功能,你需要使用一个更加成熟的抽象层。
重要的分界点:
PDO需要PHP5核心OO特性的支持,所以它无法运行于之前的PHP版本。
在Unix环境下PHP5.X以上版本中。
在Lnux环境下PHP5.X以上版本中。
错误全码:
PHP Fatal error: Uncaught exception ‘PDOException‘ with message ‘could not find driver‘ in C:\web\DVWA\dvwa\includes\dvwaPage.inc.php:469Stack trace:
#0 C:\web\DVWA\dvwa\includes\dvwaPage.inc.php(469): PDO->__construct(‘mysql:host=loca...‘, ‘root‘, ‘123123‘)#1 C:\web\DVWA\login.php(8): dvwaDatabaseConnect()#2 {main}
thrown in C:\web\DVWA\dvwa\includes\dvwaPage.inc.php on line 469
由于是第一次接触PHP,没有注意到注释,导致查了一晚上,嗯可以这么说晚上7点到夜里1点27,真是够了。希望后来的不要出现这种问题,或许只是因为我是在自学哈哈。
原文:http://www.cnblogs.com/yyx001000000001010101100101/p/6076158.html