0

私は私を狂わせるこの問題を抱えています。私が望むのは、クエリのエラーをチェックすることだけです。エラーが表示された場合はエラーを表示し、そうでない場合はクエリを実行します。

私はほとんど(挿入クエリを2回実行するため)次のように動作しています

[..]

$dbdata = new mySQLAccessData();
$db = new PDO($dbdata->hostname,$dbdata->username,$dbdata->password);
$defaults = new Defaults();

[..]

if(!$db->exec($sql)){
    echo($defaults->throwError('MySql error',implode(":",$db->errorInfo())));
}else{
    $db->exec($sql);
    $defaults->writeLog($table,$db->lastInsertId(),'add');
}

私は多くのことを試しましたが(とりわけtry(){}catch(){}メソッド)、上記のコード以外は何も機能しませんでした。エラーが発生した場合にのみ、必要な方法でエラーを表示しますが、exec()2回実行します...

誰かが私を救済できますか?

4

2 に答える 2

0

エラーが発生したときにスローされる例外を確認したい場合は、PDO エラーモードを設定するだけです (接続と接続管理も参照してください)。

$db = new PDO($dbdata->hostname,$dbdata->username,$dbdata->password);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

たとえば、これにより、コードが自動的に例外をスローします。おそらくまさにあなたが探しているものです。

コードの実際の問題はexec2 回実行されています。次のことは必要ありません。

$success = $db->exec($sql);

if (!$success) {
    echo $defaults->throwError('MySql error', implode(":", $db->errorInfo()));
} else {
    # do not exec *again* here.
    $defaults->writeLog($table, $db->lastInsertId(), 'add');
}
于 2012-11-07T10:51:41.987 に答える
0

elseその部分で再度クエリを実行したいのはなぜですか? 通常は、クエリを実行してみて、エラーが発生した場合に対処します。

[..]

$dbdata = new mySQLAccessData();
$db = new PDO($dbdata->hostname,$dbdata->username,$dbdata->password);
$defaults = new Defaults();

[..]

if(!$db->exec($sql)){
    echo($defaults->throwError('MySql error',implode(":",$db->errorInfo())));
}else{
    $defaults->writeLog($table,$db->lastInsertId(),'add');
}

私の知る限り、クエリを実際に実行する前に「テスト」するオプションはありません。

于 2012-11-07T10:52:50.907 に答える