我正在尝试编写一个小类,以便我可以使用它连接到我的数据库但是我知道PDO没有显示错误的问题。
我想要做的是在查询失败时显示mysql错误,所以我知道错误是什么并修复它。
在我的调用中,我有4种方法需要捕获mysql错误。
startConnection()
getOneResult()
processQuery()
getDataSet()
这是我目前的课程 有人可以告诉我如何显示mysql错误。注意我尝试使用try catch来捕获错误,但这对我不起作用。
感谢您的帮助
<?php
class connection {
private $connString;
private $userName;
private $passCode;
private $server;
private $pdo;
private $errorMessage;
private $pdo_opt = array (
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
function __construct($dbName, $serverName = 'localhost'){
//sets credentials
$this->setConnectionCredentials($dbName, $serverName);
//start the connect
$this->startConnection();
}
function startConnection(){
$this->pdo = new PDO($this->connString, $this->userName, $this->passCode, $this->pdo_opt);
if( ! $this->pdo){
$this->errorMessage = 'Failed to connect to database. Please try to refresh this page in 1 minute. ';
$this->errorMessage .= 'However, if you continue to see this message please contact your system administrator.';
echo $this->getError();
}
}
//this will close the PDO connection
public function endConnection(){
$this->pdo->close;
}
//return a dataset with the results
public function getDataSet($query, $data = NULL)
{
$cmd = $this->pdo->prepare( $query );
$cmd->execute($data);
return $cmd->fetchAll();
}
//return a dataset with the results
public function processQuery($query, $data = NULL)
{
$cmd = $this->pdo->prepare( $query );
return $cmd->execute($data);
}
public function getOneResult($query, $data = NULL){
$cmd = $this->pdo->prepare( $query );
$cmd->execute($data);
return $cmd->fetchColumn();
}
public function getError(){
if($this->errorMessage != '')
return $this->errorMessage;
else
return true; //no errors found
}
//this where you need to set new server credentials with a new case statment
function setConnectionCredentials($dbName, $serv){
switch($serv){
case 'NAME':
$this->connString = 'mysql:host='.$serv.';dbname='.$dbName.';charset=utf8';
$this->userName = 'user';
$this->passCode = 'password';
break;
default:
$this->connString = 'mysql:host=localhost;dbname=rdi_cms;charset=utf8';
$this->userName = 'user';
$this->passCode = 'pass!';
break;
}
}
}
?>
答案 0 :(得分:2)
您不一定显示错误消息,但只能提升。显示mysql错误消息会使您的站点不太安全,看起来很卑鄙。
所以,唯一需要关注的是
因此,请在脚本顶部尝试此代码
ini_set('display_errors',1);
error_reporting(E_ALL);
然后使用故意的mysql错误运行其中一个函数。应暂停您的脚本,显示错误消息。
更新:
好吧,我试着运行你的代码,上面这两行神奇的代码帮助了我:
Notice: Undefined variable: pdo_opt in D:\SERVER\htdocs\0.php on line 37
表示变量拼写错误(您必须使用$this->pdo_opt
) - 因此,这就是PDO没有引发异常的原因。
以上是一个教训,为什么error_reporting
应该始终 E_ALL
答案 1 :(得分:0)
我会删除或不使用方法getError()
,getOneResult()
,processQuery()
和getDataSet()
。使用该类来管理您的PDO连接。然后将您的PDO语句包装在try ... catch。
try
{
$conn = new connection( "mydatabase" );
$db = $conn->getPdoInstance();
$stmt = $db->prepare( "SELECT * FROM `something`" );
$stmt->execute();
}
catch( PDOException $e )
{
// Catch the error message and do whatever you need to do with it
}