使用PDO驱动程序检测错误/无效/非法查询(MySQL + PHP)

时间:2012-06-11 12:41:35

标签: mysql pdo

我刚刚将所有代码从旧的mysql驱动程序更改为PDO。

到目前为止,我发现很多基本功能都不存在!防爆。不等同于mysql_num_row ..等等(但这不是这篇文章的重点:/)

通常使用mysql驱动程序,我会这样做:

$result = mysql_query($query);

if(!$result){
    displayError(mysql_error());
}

你如何使用PDO做类似的事情?

2 个答案:

答案 0 :(得分:3)

看看documentation here有3种模式:

  • PDO::ERRMODE_SILENT(默认)
  • PDO::ERRMODE_WARNING
  • PDO::ERRMODE_EXCEPTION

我建议您启用last,这会导致错误时抛出异常:

$pdo = new PDO($dsn,$user,$pass,$options);  // Example connection
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

然后将您的陈述包围在try/catch

try {
    // your query here
} catch (PDOException $e) {
    echo 'Query failed: ' . $e->getMessage();
}

单独注释 - PDO中的mysql_num_row

$sql = "SELECT count(*) FROM `table` WHERE x = y"; 
$result = $con->prepare($sql); 
$result->execute(); 
$number_of_rows = $result->fetchColumn()  

答案 1 :(得分:1)

使用try { } catch {}

<?php
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';

try {
    $dbh = new PDO($dsn, $user, $password);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

?>

Reference