Created
October 11, 2012 10:04
-
-
Save CodeIQ/3871386 to your computer and use it in GitHub Desktop.
20121022_1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* セプテーニ営業実績登録スクリプト | |
*/ | |
// 今月の営業マン別売上情報 | |
$SALES_DATA = array( | |
array('salesperson_id'=>1, 'salesperson_name'=>"佐藤", 'sales_volume'=>20000000), | |
array('salesperson_id'=>2, 'salesperson_name'=>"武藤", 'sales_volume'=>8900000), | |
array('salesperson_id'=>3, 'salesperson_name'=>"瀬戸口", 'sales_volume'=>50000000), | |
); | |
$db = new SepteniDB(); | |
//登録営業マン数 | |
$insertSalespersonNumber = 0; | |
//売上合計金額 | |
$totalSalesVolume = 0; | |
foreach($SALES_DATA as $sales){ | |
//トランザクション開始 | |
$result = $db->begin(); | |
if(!$result){ | |
echo 'SQL failed: ' . __LINE__, PHP_EOL; | |
continue; | |
} | |
// 営業マンマスタ登録 | |
$sql = "INSERT INTO SALESPERSON SET SALESPERSON_ID=?, SALESPERSON_NAME=?;"; | |
$result = $db->execute($sql, array($sales['salesperson_id'], $sales['salesperson_name'])); | |
if(!$result){ | |
echo 'SQL failed: ' . __LINE__, PHP_EOL; | |
continue; | |
} | |
// 売上情報登録 | |
$sql = "INSERT INTO SALES SET SALES_DATE=CURDATE(), SALES_VOLUME=?, SALESPERSON_ID=?;"; | |
$result = $db->execute($sql, array($sales['sales_volume'], $sales['salesperson_id'])); | |
if(!$result){ | |
echo 'SQL failed: ' . __LINE__, PHP_EOL; | |
continue; | |
} | |
//コミット | |
$result = $db->commit(); | |
if(!$result){ | |
echo 'SQL failed: ' . __LINE__, PHP_EOL; | |
continue; | |
} | |
// 登録営業マン数をインクリメント | |
$insertSalespersonNumber ++; | |
// 売上合計金額に加算 | |
$totalSalesVolume += $sales['sales_volume']; | |
} | |
//レポート情報の登録 | |
$sql = "INSERT INTO SALES_REPORT SET SALES_DATE=CURDATE(), INSERT_SALESPERSON_NUMBER=?, TOTAL_SALES_VOLUME=?;"; | |
$db->execute($sql, array($insertSalespersonNumber, $totalSalesVolume)); | |
exit; | |
/** | |
* Septeniデータベースクラス | |
* | |
*/ | |
class SepteniDB { | |
public $_dbh = null; | |
function __construct(){ | |
$dsn = 'mysql:dbname=testdb;host=127.0.0.1'; | |
$user = 'dbuser'; | |
$password = 'dbpass'; | |
try { | |
$this->_dbh = new PDO($dsn, $user, $password); | |
} catch (PDOException $e) { | |
echo 'Connection failed: ' . $e->getMessage(); | |
} | |
return $this->_dbh; | |
} | |
/** | |
* クエリ実行 | |
*/ | |
function execute($sql, $bindParams=array()){ | |
$sth = $this->_dbh->prepare($sql); | |
try { | |
$sth->execute($bindParams); | |
} catch (PDOException $e) { | |
echo 'SQL error: ' . $e->getMessage(); | |
return false; | |
} | |
return true; | |
} | |
/** | |
* トランザクション開始 | |
*/ | |
function begin(){ | |
try { | |
$this->_dbh->beginTransaction(); | |
$this->execute("set autocommit=0"); | |
} catch (PDOException $e) { | |
echo 'Transaction begin failed: ' . $e->getMessage(); | |
return false; | |
} | |
return true; | |
} | |
/** | |
* コミット処理 | |
*/ | |
function commit(){ | |
try { | |
$this->_dbh->commit(); | |
} catch (PDOException $e) { | |
echo 'commit failed: ' . $e->getMessage(); | |
return false; | |
} | |
return true; | |
} | |
/** | |
* ロールバック処理 | |
*/ | |
function rollback(){ | |
try { | |
$this->_dbh->rollBack(); | |
} catch (PDOException $e) { | |
echo 'rollback failed: ' . $e->getMessage(); | |
return false; | |
} | |
return true; | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
これではプログラマの能力をはかれないと思います。
①固有ライブラリ、DB製品に依存している。
PDOとMySQLの組み合わせに馴れている人が有利です。
たとえば普段PostgreSQLで開発してる人は、バグを再現するのにMySQLのインストールからやらないといけなくて、30分では終わりません。
たとえばcodeparにはりつけてもバグは再現しない。
http://codepad.org/vdUH4TMW
②仕様、バグの内容、個数が書いていない。
バグの個数くらいは書いた方がよいのではないでしょうか。
③バグじゃないけど変なコードがある。
例えばコンストラクタ内で return $this->_dbh;と無駄なコードがあります。
この問題のゴールは「バグ修正」なので、直すべきかどうか判断に迷います。
もしコードのきれいさで評価されるなら直すのが正解、対応時間で評価されるなら直さない方が正解、ということになります。