PDO查询错误脚本

时间:2013-12-22 17:21:32

标签: php pdo

我终于得到了第一个PDO查询 - 一个简单的行计数查询。我仍在努力处理更复杂的查询(获取等)。在继续之前,我需要处理错误报告。

我的目标是创建两个PDO查询 - 一个用于在线使用,另一个用于最大化错误消息的本地查询。至少,我想知道我是否没有连接到我的数据库。 PDO也可以告诉我,如果我连接到不存在的数据库表,或者我引用表字段的方式是否有错误?我可以继续使用phpMyAdmin>这样做。在大多数情况下,SQL看起来似乎不适用于某些PDO修改的查询。

switch(PHP_OS)
{
 case 'Linux':
 // (Online query)
 break;
 default:
 // (Local query with error reporting)
 break;
}

到目前为止,我已经尝试了两种不同的数据库连接方案......

// FIRST DB CONNECTION...
try {
    $db = new PDO('mysql:host=HOST_NAME;dbname=DATABASENAME;charset=utf8', 'USERNAME', 'PASSWORD');
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

// SECOND DB CONNECTION...
$dsn = "mysql:host=localhost;dbname=DATABASE;charset=utf8";
$opt = array(
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
$pdo = new PDO($dsn,'USERNAME','PASSWORD', $opt);

第一个告诉我,如果我没有正确连接到我的数据库,但是我没有尝试过使用它的PDO查询。我的查询可以使用第二个连接($ dsn),但根本没有错误报告。

总之,下面的代码似乎适用于我的简单行(计数)查询,并且可以按原样在线使用。但有人可以告诉我如何增强它以在本地进行最大的错误报告吗?

$dsn = "mysql:host=localhost;dbname=DATABASE;charset=utf8";
$opt = array(
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
$pdo = new PDO($dsn,'USERNAME','PASSWORD', $opt);

$sql= "SELECT COUNT(URL) AS num FROM people
WHERE URL = :url";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':url',$MyURL,PDO::PARAM_STR);
$stmt->execute();
$Total = $stmt->fetch();

// This query works, also...
// $sql= "SELECT URL FROM people
// WHERE URL = '$MyURL'";
// $stmt = $pdo->prepare($sql);
// $stmt->execute();
// $Total = $stmt->rowCount();

switch($Total['num'])
{
 case 1;
 // SUCCESS! Include appropriate files.
 break;
 case 0;
 // ERROR 404 - NOT FOUND
 break;
 default:
 // MULTIPLE RESULTS; HANDLE AS NEEDED
 break;
}

1 个答案:

答案 0 :(得分:0)

您不理解错误报告的想法。它必须始终最大化。

它的目的地不同。

在本地设置中,您的整个PHP 会在屏幕上显示错误:

ini_set('display_errors', 1);

在实时服务器上,使整个PHP 显示不是一个错误,而是让它们记录下来:

ini_set('display_errors', 0);
ini_set('log_errors', 1);

从上面你也可以看出第一个PDO连接示例是绝对不可接受的,不应该使用。