PHP5.3.3
エラーがCatchに入って来ません。
データベース名に間違ったデータベース名を入れて呼び出します。
TestServerをTetServerといれる。
結果は
こんにちは1こんにちは2
になります。
データベース名を正しく入れますと
こんにちは1こんにちは2こんにちは3
まで出力されます
次にinsertのsql文を実行するfunctionにわざと間違ったカラム名を使います。ageをagといれる。
結果は
こんにちは1こんにちは2こんにちは3
となります。
もちろん正しく入れれば正常に動作するコードです。
エラーがcatchされることなく処理がそこで終わってしまいます。
「データベース名が見当たりません」や「カラム名が見つかりません」のようなエラー表示を期待していたのですか・・
どんなエラーだとcatchされるのでしょうか?
呼び出し側
echo 'こんにちは1'; require_once __DIR__ . "/../../autoload.php"; echo 'こんにちは2'; use YCom\dbclass\SqlCommon; $GDb = new SqlCommon('TetServer'); echo 'こんにちは3'; $sql = "insert into M_TEST (name,address,ag,date) values (:name,:address,:ag,:date);"; $data['name']='五郎丸'; $data['age']=30; $data['address']='ニュージランド'; $dd = new DateTime(); $data['date']=$dd->format('Y-m-d H:i:s'); $GDb->insQuery($sql,$data); echo 'こんにちは4';
呼ばれる側
<?php namespace YCom\dbclass; use PDO; Class SqlCommon { private $cn; public function __construct($DbName) { $dsn="mysql:dbname={$DbName}; host=localhost"; $usr='usr'; $passwd='usrpasswd'; $options = array( PDO::MYSQL_ATTR_READ_DEFAULT_FILE => '/etc/my.cnf', PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION, PDO::ATTR_EMULATE_PREPARES => false, ); try{ $this->cn=new PDO($dsn,$usr,$passwd,$options); } catch (PDOException $e) { header('Content-Type: text/plain; charset=UTF-8', true, 500); exit($e->getMessage()); } } public function insQuery($sql,$data) { $stmt = $this->cn-> prepare($sql); foreach ($data as $key => $val) { $stmt->bindValue(':' . $key, $val); } try{ $stmt -> execute(); echo("追加実施しました"); }catch (Exception $e) { echo("追加実施できません"); exit("Can't insert ERROR!".$e -> getMessage()); } } }
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/14 05:32