コードをmysql_*
Toから移行したばかりPDO
で、パフォーマンスが大幅に向上したことを楽しみにしています。私はhttp://wooptoo.com/blog/pdo-vs-mysqli-performance-comparison/を読んでいて、PDO
より効率的だと思いました。
しかし、何か間違ったことをしている可能性があり、コードが予想よりもはるかに遅くなる可能性があります。
私はsingleton
クラスを作成しました
class db
{
static $dbinstance=null;
public static function getinstance()
{
if (!self::$dbinstance)
{
try
{
self::$dbinstance=new PDO("mysql:host=127.0.0.1;dbname=inventory",'user','pass');
self::$dbinstance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch( PDOException $e)
{
die( '<b>Errors:</b> '.$e->getMessage());
}
}
return self::$dbinstance;
}
挿入に使用しているコードの下(簡単にするためにコードを短くしています)
if(isset($_POST['Build']))
{
$InCart=db::getinstance()->prepare("SELECT `Vendor`, `ItemType`, `ItemCode`, `ItemDesc`, `SerialNo`, `Asset_Code`, `ItmUnit`, `Qty`,`SiteId`, `id`, `Ownership`, `wh`, `Phase`, `Category`, `Issue_Vendor`, `AssetName`, `po`, `FaultInfo`, `willreturn`, `Person`, `remarks`, `grnno`,stockid FROM temptable WHERE id=?");
$insertinSIR=db::getinstance()->prepare("INSERT INTO Sir(SirNo,SiteId,Vendor,Type,ItemDesc,ItemCode,SerialNo,Unit,AssetCode,Qty,Region,Phase,Category,Issue_vendor,AssetName,ownership,Dated,PersonName,Remarks,po,invuser,grnno,WarehouseType,WarehouseLocation) values( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,NOW(),?,?,?,?,?,?,?)");
foreach ($_POST['id'] as $id)
{
$InCart->execute(array($id));
$arr=$InCart->fetch(PDO::FETCH_NUM);
$insertinSIR->execute(array($a,$arr[8],$arr[0],$arr[1],$arr[3],$arr[2],$arr[4],$arr[6],$arr[5],$arr[7],$user,$arr[12],$arr[13],$vendor,$arr[15],$arr[10],$person,$remarks,$arr[16],$invuser,$arr[21],$whtype,$whlocation));
}
誰かがパフォーマンスヒッターを指摘していただければ幸いです。
編集
ステートメントを準備してループで実行するのは正しい方法ですか?