2014年10月29日水曜日

メモ・データベースとの連携


SQL文でつまづいたのでメモ。

MySQLのデータベースからSQL文(select)で情報を取り出す。

  1. PHPでSQL文を作成
  2.  →データベースへSQL文発行(MySQL)
  3.   →レコードセット(戻り値)からデータを取り出す
まず部分検索の「LIKE」を使いたかった。

やりたいこと(1)--「赤」という名前を含むアイテムを「items」テーブルの「color」フィールドから検索

 SELECT    *
 FROM    items
 WHERE    color LIKE ‘%赤%’ ;


文字の前後どちらとも曖昧で良いように、前後に%をつける。 


 「赤」がつくアイテムが大量にあるため「LIMIT」を使って表示件数を制限する。
このとき、前後の処理の関係で件数には変数を代入する

「LIMIT ○件」の部分にsprintfで$numberを入れる。

やりたいこと(2)-表示件数を制限

$sql=sprintf("SELECT * FROM items WHERE color LIKE ‘%赤%’ LIMIT %d;",$number);

こでで%dの部分に$numberが入って、名前に「赤」とつくアイテムが「&number」件だけ取り出せるはず。

取り出せなかった。
$sqlをechoしてみるが、何も入ってない…?

原因:sprintf( "○○○○", $変数);
   この○○に「%」があるため、正しく処理されてない。
   ‘%赤%’の部分が「%d」や「%x」のように思われてる。なるほど。
 ↓
対処:%を%%に変更。文字列の%として扱ってくれる。


こんなところで30分悩んだ。

 文字列関数・sprintf

こちらの記事で解決しました!
printf関数とsprintf関数のフォーマット指定子のオプションと型指定子 (Perl勉強日記)


 

0 件のコメント:

コメントを投稿