インデックスが効いてなかったのです。

2013年7月3日

とあるローカルで動くアプリでこんな記述がありました。

$sql = "SELECT * FROM hoge WHERE id=123456";

ここで、hoge.idはvarchar型でインデックスが作成されているものとします。
実行するSQLを定義しているだけなのですが、このSQLを実行すると

どうなるかというと、

インデックスが効きません。

$sql = "SELECT * FROM hoge WHERE id='123456'";

と、囲ってやらないとすべてのカラムに対してキャストしながら検索を行い、せっかくのindexにも意味ありません。

しかしまあぶっちゃけ、使えるならprepared使ったほうがいいと思うよ。

PHP | majin | 14:30 | Comments (0)

Symfony2 アプリのデプロイ

2013年3月11日

妙に苦戦してしまったので、メモしておきます。

(more…)

PHP | majin | 20:41 | Comments (0)

Symphony2というかDoctrineというか・・・

2013年2月5日

Symfonyと言うよりはDoctrineですが、ハマったり困ったりしたところをちょっとまとめておきます。
私にかぎらず初心者なら引っ掛かりかねないと思うので、メモがてらのこしておきます。

(more…)

PHP | majin | 21:55 | Comments (0)

Symfony2でXML出力

2013年1月30日

最近なぜかSymfony2をやってます。
あんま面白くは無いですが、やっぱりちゃんと思ったとおりに動けば嬉しいものですね。
ただ、日本語資料が非常に少なく、厄介っちゃあ厄介ですね。英語読むのはできないわけじゃないんですが、読むことに脳の処理の多くを持っていかれてしまうため、理解に時間かかって困ってしまいます。

今日は表題の通り、Symfony2でXMLを出力する方法について書きます。

一応日本Symfonyユーザー会のサイトでは下のような感じでやってます。

// src/Acme/DemoBundle/Controller/DemoController.php
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

/**
 * @Route("/hello/{name}", defaults={"_format"="xml"}, name="_demo_hello")
 * @Template()
 */

public function helloAction($name)
{
    return array('name' => $name);
}

※日本Symfonyユーザー会サイトより引用です。

これでなんか上手く行かなかったのもありますが、コメントに動作上の意味があるとかおっちゃんには納得出来ない自称なので、こんなかんじでやってみました。

controller

HelloController.php

namespace Acme\HelloBundle\Controller;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Acme\HelloBundle\Entity\DatabaseProduct;

class HelloController extends Controller
{
    public function indexAction()
    {
      $repo = $this->getDoctrine()->getRepository('AcmeHelloBundle:DatabaseProduct');

      $products_query = $repo->createQueryBuilder('p')->getQuery();
      $products_query->setFirstResult( 0 )->setMaxResults( 25 );
     
      $products = $products_query->getResult();

      $response = new Response();
      $response->headers->set('Content-Type', 'xml');

      return $this->render('AcmeHelloBundle:Hello:index.xml.twig', array('products' => $products ), $response);
    }    
}
?>

view

index.xml.twig

<?xml version="1.0" encoding="UTF-8" ?>
<Response>
    <Items>
        {% for product in products %}
            <NAME>{{ product.getName() }}</NAME>
        {% endfor %}
    </Items>
</Response>

解説

やっていることは、controlerでResponseオブジェクトで強制的にXMLを返すようにしていることと、viewで<?xml version=”1.0″ encoding=”UTF-8″ ?>を出力しているだけですね。

まとめ

まだ使い始めて2週間ちょいなのですが、MVCの概念を知ってれば理解が早いような気がします。
ここでははじめてのPHPですね。開発者数も多く、情報も過多気味だと思っていたので、避けていたんですがねえ・・・。

PHP | majin | 00:30 | Comments (0)
Copyright © MAJIN_T
Powered by WordPress