SQL文でつまづいたのでメモ。
MySQLのデータベースからSQL文(select)で情報を取り出す。
- PHPでSQL文を作成
- →データベースへSQL文発行(MySQL)
- →レコードセット(戻り値)からデータを取り出す
やりたいこと(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勉強日記)