tokuisakiテーブルにnameフィールドがあります。
$myoujiが「太田」だったとします。
nameが「太田一郎」だった場合、「上太田一郎」さんは下記のSQL文で抽出されません。
select * from tokuisaki where name like '$myouji%'
nameが「太田川一郎」だった場合、「太田川一郎」さんは上記のSQL文で抽出されます。
これを「太田一郎」で抽出され「太田川一郎」だった場合、抽出されないようにしたいのですが。
$myoujiの文字数を数えて(例えば3文字)、nameの先頭から$myoujiの文字数分だけ(例えば3文字)同じ、
というSQLが書けません。
書いてうまくいかない構文
$mojisuu = mb_strlen( $myouji );
select * from tokuisaki where substr('name', 0, $mojisuu) = '$myouji'
実際はprepareステートメントを使って以下のように書いてます。
$mojisuu = mb_strlen($myouji);
$st02 = $dbh->prepare("select * from tokuisaki where substr('name',0,$mojisuu) = '$myouji' ORDER BY byear DESC");
$st02->execute();
エラーは出ないのですが1件も抽出されません。
おかしな箇所を教えてください。
よろしくお願いします。
PHP7です。
おかしな箇所を教えてください
substr 関数の一番目がシングルクォートで括られているところ。
'name' という文字列の頭から 2文字とかで比較することになります。
後、substr の第2引数が 0 なのも、気になります。
SQL の文法上は、位置の指定は 1始まりなので。
ただ、ゼロを許容する RDB があったような、なかったような(うろ覚え)。