<?xml version="1.0" encoding="UTF-8" ?>
<rss version="0.91">
  <channel>
    <title>IT女子の仕事メモ</title>
    <description></description>
    <link>http://none.3rin.net/</link>
    <language>ja</language>
    <copyright>Copyright (C) NINJATOOLS ALL RIGHTS RESERVED.</copyright>

    <item>
      <title>PHP PDO prepareでLIKE（部分一致）検索するときのbindValueのパラメータ</title>
      <description>ふつうに「%」で括ってもうまくいかない。&lt;br /&gt;
sqlを直に実行するとふつうに動くので、bindValueがうまくいっていない模様。&lt;br /&gt;
原因は、「%」をくっつけるタイミングでした。&lt;br /&gt;
&lt;pre class=&quot;brush:php&quot;&gt;&lt;br /&gt;
$query = &quot;select * from table where testdata like :value &quot;;&lt;br /&gt;
$stmt  = $pdo-&amp;gt;prepare($query);&lt;br /&gt;
$stmt-&amp;gt;bindValue(&quot;:value&quot;, '%'. $value .'%', PDO::PARAM_STR);&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
sql文中ではなく、bindValueのときに付けてあげるのが正しいみたい。&lt;br /&gt;
&lt;br /&gt;
ちなみに間違ったのはこういう記述&amp;darr;&lt;br /&gt;
&lt;pre class=&quot;brush:php&quot;&gt;$query = &quot;select * from table where testdata like %:value% &quot;;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
あとこれも&amp;darr;&lt;br /&gt;
&lt;pre class=&quot;brush:php&quot;&gt;$query = &quot;select * from table where testdata like ':value' &quot;;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
参考URL&lt;br /&gt;
http://okwave.jp/qa/q3863004.html</description> 
      <link>http://none.3rin.net/php/php%20pdo%20prepare%E3%81%A7like%EF%BC%88%E9%83%A8%E5%88%86%E4%B8%80%E8%87%B4%EF%BC%89</link> 
    </item>
    <item>
      <title>PHP PDO 1つずつprepare・bindValueしなくて済む方法</title>
      <description>where文を作るとき、検索条件がたくさん設定できると、ひとつずつprepareしてbindValueしてwhereとandで分けて&amp;hellip;&amp;hellip;とやるのがめんどくさい。&lt;br /&gt;
そんなときの救世主コード&amp;darr;&lt;br /&gt;
&lt;br /&gt;
関数定義&lt;br /&gt;
&lt;pre class=&quot;brush:php&quot;&gt;&lt;br /&gt;
function where($names, &amp;amp;$values) {&lt;br /&gt;
  $wheres = $values = array();&lt;br /&gt;
  foreach ($names as $name) {&lt;br /&gt;
      if (isset($_REQUEST[$name]) &amp;amp;&amp;amp; is_string($str = $_REQUEST[$name]) &amp;amp;&amp;amp; $str !== '') {&lt;br /&gt;
          $wheres[] = &quot;{$name} = ?&quot;;&lt;br /&gt;
          $values[] = $str;&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
  return $wheres ? ' WHERE ' . implode(' AND ', $wheres) : '' ;&lt;br /&gt;
}&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
使用例&lt;br /&gt;
&lt;pre class=&quot;brush:php&quot;&gt;&lt;br /&gt;
$pdo = new PDO('DSN', 'USERNAME', 'PASSWORD');&lt;br /&gt;
$params = array('name', 'gender', 'address');&lt;br /&gt;
$stmt = $pdo-&amp;gt;prepare('SELECT * from myTable' . where($params, $values));&lt;br /&gt;
$stmt-&amp;gt;execute($values);&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
これはすごい！きれいで便利！&lt;br /&gt;
&lt;br /&gt;
そしてlikeもできる！&lt;br /&gt;
&lt;br /&gt;
関数定義&lt;br /&gt;
&lt;pre class=&quot;brush:php&quot;&gt;&lt;br /&gt;
function where($items, &amp;amp;$values) {&lt;br /&gt;
  $wheres = $values = array();&lt;br /&gt;
  foreach ($items as $item) {&lt;br /&gt;
      $name = $item['name'];&lt;br /&gt;
      $like = $item['like']; &lt;br /&gt;
      if (isset($_REQUEST[$name]) &amp;amp;&amp;amp; is_string($str = $_REQUEST[$name]) &amp;amp;&amp;amp; $str !== '') {&lt;br /&gt;
          if ($like) {&lt;br /&gt;
              $wheres[] = &quot;{$name} LIKE ?&quot;;&lt;br /&gt;
              $values[] = '%' . addcslashes($str, '%_\\') . '%' ;&lt;br /&gt;
          } else {&lt;br /&gt;
              $wheres[] = &quot;{$name} = ?&quot;;&lt;br /&gt;
              $values[] = $str;&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
  return $wheres ? ' WHERE ' . implode(' AND ', $wheres) : '' ;&lt;br /&gt;
}&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
使用例&lt;br /&gt;
&lt;pre class=&quot;brush:php&quot;&gt;&lt;br /&gt;
$pdo = new PDO('DSN', 'USERNAME', 'PASSWORD');&lt;br /&gt;
$params = array(&lt;br /&gt;
  array(&lt;br /&gt;
      'name' =&amp;gt; 'name',&lt;br /&gt;
      'like' =&amp;gt; FALSE,&lt;br /&gt;
  ),&lt;br /&gt;
  array(&lt;br /&gt;
      'name' =&amp;gt; 'gender',&lt;br /&gt;
      'like' =&amp;gt; FALSE,&lt;br /&gt;
  ),&lt;br /&gt;
  array(&lt;br /&gt;
      'name' =&amp;gt; 'address',&lt;br /&gt;
      'like' =&amp;gt; TRUE,&lt;br /&gt;
  ),&lt;br /&gt;
);&lt;br /&gt;
$stmt = $pdo-&amp;gt;prepare('SELECT * from myTable' . where($params, $values));&lt;br /&gt;
$stmt-&amp;gt;execute($values);&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
参考URL&lt;br /&gt;
http://qiita.com/mpyw/items/c64ce7477169a710f755</description> 
      <link>http://none.3rin.net/php/php%20pdo%201%E3%81%A4%E3%81%9A%E3%81%A4prepare%E3%83%BBbindva</link> 
    </item>
    <item>
      <title>PHP/MySQL PDOの「SET NAMES」の代替策</title>
      <description>MySQLから取得したデータの文字コード指定。&lt;br /&gt;
SET NAMESは非推奨らしいので、代わりになる書き方を探しました。&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;text-decoration: line-through;&quot;&gt;&lt;span style=&quot;text-decoration: line-through;&quot;&gt;これでできるみたい&amp;darr;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:php&quot;&gt;&lt;br /&gt;
try {&lt;br /&gt;
 $pdo = new PDO($db_dsn,$db_user, $db_password,&lt;br /&gt;
     array(&lt;br /&gt;
         PDO::MYSQL_ATTR_INIT_COMMAND =&amp;gt; &quot;SET CHARACTER SET `utf8`&quot;&lt;br /&gt;
     )&lt;br /&gt;
 );&lt;br /&gt;
} catch (PDOException $e) {&lt;br /&gt;
 die($e-&amp;gt;getMessage());&lt;br /&gt;
}&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;text-decoration: line-through;&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
参考URL&amp;rarr;&lt;br /&gt;
http://me.beginsprite.com/archives/889&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span color=&quot;red&quot; style=&quot;color: red;&quot;&gt;&lt;b&gt;間違ってたみたいです！！！&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
参考&amp;rarr;http://qiita.com/hiro_y/items/6fabdef669e35e92bdc4</description> 
      <link>http://none.3rin.net/php/php-mysql%20pdo%E3%81%AE%E3%80%8Cset%20names%E3%80%8D%E3%81%AE%E4%BB%A3%E6%9B%BF%E7%AD%96</link> 
    </item>
    <item>
      <title>PHP PDOのfetchとfetchallの使い分け</title>
      <description>PDO関数を使ってのMySQL接続を勉強中。&lt;br /&gt;
fetchallはなんとなくつかめたけど、fetchがどうもしっくりこない。&lt;br /&gt;
使い分けはトラフィックとかそのあたりみたい。&lt;br /&gt;
でもとりあえずfetchallで大丈夫なとこはそれでいいかなぁ。。。&lt;br /&gt;
&lt;br /&gt;
ブクマメモ。&lt;br /&gt;
http://nkd920.blog10.fc2.com/blog-entry-36.html</description> 
      <link>http://none.3rin.net/mysql/php%20pdo%E3%81%AEfetch%E3%81%A8fetchall%E3%81%AE%E4%BD%BF%E3%81%84%E5%88%86%E3%81%91</link> 
    </item>
    <item>
      <title>WordPressプラグイン作成 check_admin_refererとsave_postフックのエラー</title>
      <description>記事をインポートするプラグインを動かしたところ、「本当によろしいですか？」とメッセージが出るだけでその先に進めない（OKボタンが出てこない）&lt;br /&gt;
で、タイトルを見ると「WordPress エラー通知」と出てるので、どこかでプラグインが競合してるっぽい。&lt;br /&gt;
&lt;br /&gt;
調べた結果、save_postのフックの処理が動いてしまっていました。&lt;br /&gt;
インポート時も動くんですねー。&lt;br /&gt;
&lt;br /&gt;
そしてcheck_admin_refererのあたりで落ちているようです。&lt;br /&gt;
引数のnonceの値が取れてないよ！というのが原因。&lt;br /&gt;
nullのチェックはしてくれない模様。&lt;br /&gt;
&lt;pre class=&quot;brush:php&quot;&gt;&lt;br /&gt;
	//※nonceの値が取得できない場合は終了&lt;br /&gt;
	if( ! $_POST['nonce_field']){&lt;br /&gt;
		return $_POST-&amp;gt;ID;&lt;br /&gt;
	}&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
無理矢理ですが、こんなかんじで回避。&lt;br /&gt;
&lt;br /&gt;
ちなみにsave_postは投稿画面だけでなく固定ページでも動いてしまいます。&lt;br /&gt;
「post」だから記事だけなのかと思ってた。。。</description> 
      <link>http://none.3rin.net/wordpress/wordpress%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E4%BD%9C%E6%88%90%20check_adm</link> 
    </item>
    <item>
      <title>WordPressプラグイン作成 カスタム投稿タイプのadd_meta_box</title>
      <description>add_meta_boxを使うには投稿タイプの指定が必要。&lt;br /&gt;
&lt;br /&gt;
投稿記事&amp;rarr;post&lt;br /&gt;
固定ページ&amp;rarr;page&lt;br /&gt;
カスタム投稿タイプ&amp;rarr;スラッグ名&lt;br /&gt;
&lt;br /&gt;
ということらしいですが、全部のカスタム投稿タイプに入れたい場合、スラッグ名をひとつずつ書くと後々面倒。&lt;br /&gt;
そんなわけで、カスタム投稿タイプの一覧を取得&amp;rarr;ループで全部にadd_meta_box、という処理がこちらです&amp;darr;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:php&quot;&gt;&lt;br /&gt;
//すべてのカスタム投稿タイプでも有効にする&lt;br /&gt;
foreach( get_post_types( array( 'public' =&amp;gt; true, '_builtin' =&amp;gt; false ), 'objects' ) as $key =&amp;gt; $val ) {&lt;br /&gt;
	add_meta_box( 'force_future_to_publish', $box_title, 'force_future_to_publish_metabox', $val-&amp;gt;slug, 'side' );&lt;br /&gt;
}&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
array_keysでスラッグ名だけの配列にしてループさせた方が、シンプルでカスタマイズしやすいのかな、と思います。&lt;br /&gt;
&lt;br /&gt;
■ソースコピペ元&lt;br /&gt;
&lt;a href=&quot;http://kijtra.com/article/wordpress-future-post-publish&quot; target=&quot;_blank&quot;&gt;http://kijtra.com/article/wordpress-future-post-publish&lt;/a&gt;</description> 
      <link>http://none.3rin.net/wordpress/wordpress%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E4%BD%9C%E6%88%90%20%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E6%8A%95%E7%A8%BF%E3%82%BF%E3%82%A4%E3%83%97</link> 
    </item>
    <item>
      <title>SyntaxHighlighter 忍者ブログでソースコード表示</title>
      <description>ソースコードを見やすく表示するために、SyntaxHighlighterを導入しました。&lt;br /&gt;
本家からダウンロード&amp;rarr;アップロード、という手順が、忍者ブログだと結構手間だったので一度あきらめたのですが、便利なツールを発見したので再挑戦。&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Syntax Highlighter Scripts Generator&lt;/strong&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.way2blogging.org/widget-generators/syntax-highlighter-scripts-generator&quot; target=&quot;blank&quot;&gt;http://www.way2blogging.org/widget-generators/syntax-highlighter-scripts-generator&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
表示したいスクリプトの種類を選ぶだけで、コピペ用のソースが出力されます。これを、テンプレートファイルの&amp;lt;/head&amp;gt;タグ直前に貼ればOK&lt;br /&gt;
テーマ（CSSファイル）もいくつか選べます。&lt;br /&gt;
&lt;br /&gt;
ちょっと表示に時間がかかるのが難点（外部なんで当たり前ですが）&lt;br /&gt;
環境的にできない場合とか、取り急ぎやりたい場合とか、（わたしのように）めんどくさがりな方にはとてもおすすめです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
■Blogger に Syntax Highlighter を導入する&lt;br /&gt;
&lt;a href=&quot;http://naichilab.blogspot.jp/2013/04/blogger-syntax-highlighter.html&quot; target=&quot;blank&quot;&gt;http://naichilab.blogspot.jp/2013/04/blogger-syntax-highlighter.html&lt;/a&gt;&lt;br /&gt;
記事はBlogger用ですが、忍者ブログもほぼ一緒。&lt;br /&gt;
&lt;br /&gt;
■HTMLエスケープツール&lt;br /&gt;
&lt;a href=&quot;http://webtools.dounokouno.com/htmlescape/index.html&quot; target=&quot;blank&quot;&gt;http://webtools.dounokouno.com/htmlescape/index.html&lt;/a&gt;&lt;br /&gt;
&amp;lt;や&amp;gt;を参照文字にエスケープしてくれるツール。preタグ・codeタグ付加とタブ削除等も有。</description> 
      <link>http://none.3rin.net/tools/syntaxhighlighter%20%E5%BF%8D%E8%80%85%E3%83%96%E3%83%AD%E3%82%B0%E3%81%A7%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89%E8%A1%A8%E7%A4%BA</link> 
    </item>
    <item>
      <title>WordPressプラグイン作成 「保存しました」メッセージを表示</title>
      <description>記事を投稿した時や設定を保存した時に表示される「保存しました」メッセージを、add_menu_pageで作った自作ページで出力する方法。&lt;br /&gt;
関数があるのかなと思ったのですが見当たらず。&lt;br /&gt;
結局、クラスを当てて単純にprintしました。
&lt;pre class=&quot;brush:php&quot;&gt;print('&amp;lt;div class=&quot;updated&quot; id=&quot;message&quot;&amp;gt;&amp;lt;p&amp;gt;設定を保存しました。&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;');&lt;/pre&gt;
&lt;br /&gt;
&amp;uarr;のidとclassは、ワードプレスでデフォルトで表示されるメッセージのとおなじもの。&lt;br /&gt;
見た目の装飾だけなら、自作してもいいのかな。</description> 
      <link>http://none.3rin.net/wordpress/wordpress%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E4%BD%9C%E6%88%90%20%E3%80%8C%E4%BF%9D%E5%AD%98%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%80%8D%E3%83%A1</link> 
    </item>
    <item>
      <title>PHP substrで文字化け→半角全角混在が原因！</title>
      <description>substrでバイト単位での文字列の切り取り。&lt;br /&gt;
ときどき文字化けが起こるけれど、末尾だけなので文字コードの問題ではなさそう。&lt;br /&gt;
いろいろ試した結果、半角と全角が混在している文章のときに発生するようで、バイト指定で切り取られたことで末尾の文字が中途半端に出力されていたようです。&lt;br /&gt;
&lt;br /&gt;
【方法1】&lt;br /&gt;
mb_substr を使う。&lt;br /&gt;
&lt;br /&gt;
こっちはマルチバイト対応なので、半角全角が混在していても問題なく取れますが、バイト指定ではなく文字数指定なので今回はNG。&lt;br /&gt;
&lt;br /&gt;
【方法2】&lt;br /&gt;
mb_strimwidth を使う。&lt;br /&gt;
&lt;br /&gt;
指定した幅で文字列を丸める。幅＝バイト数のようです。文字コードも指定できるので、今回はこれで解決できました！&lt;br /&gt;
第4引数の「丸めた後にその文字列の最後に追加される文字列」を指定すると、これも含めたバイト数として計算されるようなので注意。&lt;br /&gt;
&lt;br /&gt;
mb_strimwidth&lt;br /&gt;
&lt;a href=&quot;http://www.php.net/manual/ja/function.mb-strimwidth.php&quot; target=&quot;_blank&quot;&gt;http://www.php.net/manual/ja/function.mb-strimwidth.php&lt;/a&gt;</description> 
      <link>http://none.3rin.net/php/php%20substr%E3%81%A7%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91%E2%86%92%E5%8D%8A%E8%A7%92%E5%85%A8%E8%A7%92%E6%B7%B7%E5%9C%A8%E3%81%8C%E5%8E%9F%E5%9B%A0%EF%BC%81</link> 
    </item>
    <item>
      <title>WordPressプラグイン wp_nonce_fieldってなに？</title>
      <description>他のサイトから来ていないかどうかの保護用？みたいなことらしいけど、いまいちよくわからない。&lt;br /&gt;
意味合い的には、CSRF対策＝リクエスト強要、ということらしいです。外部攻撃対策的な。&lt;br /&gt;
管理者ページからのリクエストかどうかのチェック方法は、&lt;br /&gt;
wp_verify_nonce&lt;br /&gt;
ではなく&lt;br /&gt;
check_admin_referer&lt;br /&gt;
を使う方が良いそうです。&lt;br /&gt;
注意点は、引数はユニークであること！&quot;プラグイン名&quot; + &quot;アクション名&quot; + オブジェクト名、と指定するのが正しいらしい。&lt;br /&gt;
&lt;br /&gt;
■WordPress での CSRF 対策&lt;br /&gt;
&lt;a href=&quot;http://hetarena.com/archives/2039&quot; target=&quot;_blank&quot;&gt;http://hetarena.com/archives/2039&lt;/a&gt;&lt;br /&gt;
nonceってなに？を詳しく解説。ワードプレスの場合は有効期間があるらしい。&lt;br /&gt;
&lt;br /&gt;
■【WordPressの自作プラグインの設定画面に入力フォームを設置した場合に気をつける基本的なこと】そしてWordCampのあるセッションでプラグイン開発について改めて考えさせられました&lt;br /&gt;
&lt;a href=&quot;http://www.imamura.biz/blog/cms/wordpress/6553&quot; target=&quot;_blank&quot;&gt;http://www.imamura.biz/blog/cms/wordpress/6553&lt;/a&gt;&lt;br /&gt;
具体的な使い方。サンプルソース有。&lt;br /&gt;
&lt;br /&gt;
■WordPressプラグインのコーディングでありがちな10の間違いと設計時に考慮すべきこと&lt;br /&gt;
&lt;a href=&quot;http://tokkono.cute.coocan.jp/blog/slow/index.php/wordpress/most-common-mistakes-in-wordpress-plugins-coding/&quot; target=&quot;_blank&quot;&gt;http://tokkono.cute.coocan.jp/blog/slow/index.php/wordpress/most-common-mistakes-in-wordpress-plugins-coding/&lt;/a&gt;&lt;br /&gt;
nonceのこと以外にもいろいろ書かれていて参考になりました。</description> 
      <link>http://none.3rin.net/wordpress/wordpress%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%20wp_nonce_fi</link> 
    </item>

  </channel>
</rss>