『徳丸本の内容はやってみました』とのことですので、やってまいりました。まずは、拙著をお読みいただきありがとうございます。
まず、SQLインジェクションがあるかないかでいうと、引用された4行に関してはSQLインジェクション脆弱性はありません。しかし、それ以外の箇所に脆弱性(SQLインジェクション以外も含めて)があるかないかはもちろん分かりません。
あと、気になることとして、SQLインジェクション検査として使用している文字列が危険すぎることです。確かに、私の本に出てくる文字列もありますが、これはあくまで「SQLインジェクションの脅威の説明」のためのものですので、脆弱性があった場合に破壊的な結果になるものがあります。
簡単に使える診断文字列としては、IPAが公開している「ウェブ健康診断仕様」があり、以下のURLからダウンロードできます。
https://www.ipa.go.jp/security/vuln/websecurity.html
「引用された4行に関してはSQLインジェクション脆弱性はありません」と書きましたが、状況によってはSQLインジェクションになる可能性がゼロではありません。
以下のブログ記事に書いたような状況が過去には(PHPのバージョンが古い場合)ありました。
ぼくがPDOを採用しなかったわけ(Shift_JISによるSQLインジェクション)
当該ブログからSQL呼び出しの箇所を引用しますが、ご質問のものとほぼ同じです。バインドの仕方が違いますが、そこが原因ではありません。
$sth = $dbh->prepare("select * from test WHERE name=?");
$sth->setFetchMode(PDO::FETCH_NUM);
$name = ...
$sth->execute(array($name));
なので、このような質問をされる場合は、もっと広い範囲でソースコードを示していただいた方が良いアドバスができると思います。
ただし、この問題はプログラム内部で文字エンコーディングとしてShift_JISを使っているケースでのみ発生するので、さすがに現在、そのような状況である可能性は極めて低いと思います。