でもさあ,$name="' or 1=1" だったら結局SQLインジェクションじゃんか

よく見てほしいのは,name='$name' ではなく, name=$name になっている点だ.
ここでは,$name は,あらかじめ文字列型(すなわち,「自然言語型」)として宣言されているものとする.すると,

$name部分には文字列型が入る=そこは文字列として構文解析される

ということが保障されているので,' ' をつけなくてもよくなっている.逆にいえば$nameの中にいくら ' を混ぜようと,それはただの字としてしか扱われない

....書いてて説明がまとまってないのはわかります.また後日.